LCOV - code coverage report
Current view: top level - src/components/verilog - EKV26MOS.core.cpp (source / functions) Hit Total Coverage
Test: qucs-core-0.0.19 Code Coverage Lines: 0 841 0.0 %
Date: 2015-01-05 16:01:02 Functions: 0 28 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 1062 0.0 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * EKV26MOS.core.cpp - device implementations for EKV26MOS module
       3                 :            :  *
       4                 :            :  * This is free software; you can redistribute it and/or modify
       5                 :            :  * it under the terms of the GNU General Public License as published by
       6                 :            :  * the Free Software Foundation; either version 2, or (at your option)
       7                 :            :  * any later version.
       8                 :            :  *
       9                 :            :  */
      10                 :            : 
      11                 :            : #if HAVE_CONFIG_H
      12                 :            : #include <config.h>
      13                 :            : #endif
      14                 :            : 
      15                 :            : #include "EKV26MOS.analogfunction.h"
      16                 :            : #include "component.h"
      17                 :            : #include "device.h"
      18                 :            : #include "EKV26MOS.core.h"
      19                 :            : 
      20                 :            : #ifndef CIR_EKV26MOS
      21                 :            : #define CIR_EKV26MOS -1
      22                 :            : #endif
      23                 :            : 
      24                 :            : // external nodes
      25                 :            : #define Drain 0
      26                 :            : #define Gate 1
      27                 :            : #define Source 2
      28                 :            : #define Bulk 3
      29                 :            : // internal nodes
      30                 :            : #define Drain_int 4
      31                 :            : #define Source_int 5
      32                 :            : 
      33                 :            : // useful macro definitions
      34                 :            : #define NP(node) real (getV (node))
      35                 :            : #define BP(pnode,nnode) (NP(pnode) - NP(nnode))
      36                 :            : #define _load_static_residual2(pnode,nnode,current)\
      37                 :            :         _rhs[pnode] -= current;\
      38                 :            :         _rhs[nnode] += current;
      39                 :            : #define _load_static_augmented_residual2(pnode,nnode,current)\
      40                 :            :         _rhs[pnode] -= current;\
      41                 :            :         _rhs[nnode] += current;
      42                 :            : #define _load_static_residual1(node,current)\
      43                 :            :         _rhs[node] -= current;
      44                 :            : #define _load_static_augmented_residual1(node,current)\
      45                 :            :         _rhs[node] -= current;
      46                 :            : #define _load_static_jacobian4(pnode,nnode,vpnode,vnnode,conductance)\
      47                 :            :         _jstat[pnode][vpnode] += conductance;\
      48                 :            :         _jstat[nnode][vnnode] += conductance;\
      49                 :            :         _jstat[pnode][vnnode] -= conductance;\
      50                 :            :         _jstat[nnode][vpnode] -= conductance;\
      51                 :            :         if (doHB) {\
      52                 :            :         _ghs[pnode] += conductance * BP(vpnode,vnnode);\
      53                 :            :         _ghs[nnode] -= conductance * BP(vpnode,vnnode);\
      54                 :            :         } else {\
      55                 :            :         _rhs[pnode] += conductance * BP(vpnode,vnnode);\
      56                 :            :         _rhs[nnode] -= conductance * BP(vpnode,vnnode);\
      57                 :            :         }
      58                 :            : #define _load_static_jacobian2p(node,vpnode,vnnode,conductance)\
      59                 :            :         _jstat[node][vpnode] += conductance;\
      60                 :            :         _jstat[node][vnnode] -= conductance;\
      61                 :            :         if (doHB) {\
      62                 :            :         _ghs[node] += conductance * BP(vpnode,vnnode);\
      63                 :            :         } else {\
      64                 :            :         _rhs[node] += conductance * BP(vpnode,vnnode);\
      65                 :            :         }
      66                 :            : #define _load_static_jacobian2s(pnode,nnode,node,conductance)\
      67                 :            :         _jstat[pnode][node] += conductance;\
      68                 :            :         _jstat[nnode][node] -= conductance;\
      69                 :            :         if (doHB) {\
      70                 :            :         _ghs[pnode] += conductance * NP(node);\
      71                 :            :         _ghs[nnode] -= conductance * NP(node);\
      72                 :            :         } else {\
      73                 :            :         _rhs[pnode] += conductance * NP(node);\
      74                 :            :         _rhs[nnode] -= conductance * NP(node);\
      75                 :            :         }
      76                 :            : #define _load_static_jacobian1(node,vnode,conductance)\
      77                 :            :         _jstat[node][vnode] += conductance;\
      78                 :            :         if (doHB) {\
      79                 :            :         _ghs[node] += conductance * NP(vnode);\
      80                 :            :         } else {\
      81                 :            :         _rhs[node] += conductance * NP(vnode);\
      82                 :            :         }
      83                 :            : #define _load_dynamic_residual2(pnode,nnode,charge)\
      84                 :            :         if (doTR) _charges[pnode][nnode] += charge;\
      85                 :            :         if (doHB) {\
      86                 :            :         _qhs[pnode] -= charge;\
      87                 :            :         _qhs[nnode] += charge;\
      88                 :            :         }
      89                 :            : #define _load_dynamic_residual1(node,charge)\
      90                 :            :         if (doTR) _charges[node][node] += charge;\
      91                 :            :         if (doHB) {\
      92                 :            :         _qhs[node] -= charge;\
      93                 :            :         }
      94                 :            : #define _load_dynamic_jacobian4(pnode,nnode,vpnode,vnnode,capacitance)\
      95                 :            :         if (doAC) {\
      96                 :            :         _jdyna[pnode][vpnode] += capacitance;\
      97                 :            :         _jdyna[nnode][vnnode] += capacitance;\
      98                 :            :         _jdyna[pnode][vnnode] -= capacitance;\
      99                 :            :         _jdyna[nnode][vpnode] -= capacitance;\
     100                 :            :         }\
     101                 :            :         if (doTR) {\
     102                 :            :         _caps[pnode][nnode][vpnode][vnnode] += capacitance;\
     103                 :            :         }\
     104                 :            :         if (doHB) {\
     105                 :            :         _chs[pnode] += capacitance * BP(vpnode,vnnode);\
     106                 :            :         _chs[nnode] -= capacitance * BP(vpnode,vnnode);\
     107                 :            :         }
     108                 :            : #define _load_dynamic_jacobian2s(pnode,nnode,vnode,capacitance)\
     109                 :            :         if (doAC) {\
     110                 :            :         _jdyna[pnode][vnode] += capacitance;\
     111                 :            :         _jdyna[nnode][vnode] -= capacitance;\
     112                 :            :         }\
     113                 :            :         if (doTR) {\
     114                 :            :         _caps[pnode][nnode][vnode][vnode] += capacitance;\
     115                 :            :         }\
     116                 :            :         if (doHB) {\
     117                 :            :         _chs[pnode] += capacitance * NP(vnode);\
     118                 :            :         _chs[nnode] -= capacitance * NP(vnode);\
     119                 :            :         }
     120                 :            : #define _load_dynamic_jacobian2p(node,vpnode,vnnode,capacitance)\
     121                 :            :         if (doAC) {\
     122                 :            :         _jdyna[node][vpnode] += capacitance;\
     123                 :            :         _jdyna[node][vnnode] -= capacitance;\
     124                 :            :         }\
     125                 :            :         if (doTR) {\
     126                 :            :         _caps[node][node][vpnode][vnnode] += capacitance;\
     127                 :            :         }\
     128                 :            :         if (doHB) {\
     129                 :            :         _chs[node] += capacitance * BP(vpnode,vnnode);\
     130                 :            :         }
     131                 :            : #define _load_dynamic_jacobian1(node,vnode,capacitance)\
     132                 :            :         if (doAC) {\
     133                 :            :         _jdyna[node][vnode] += capacitance;\
     134                 :            :         }\
     135                 :            :         if (doTR) {\
     136                 :            :         _caps[node][node][vnode][vnode] += capacitance;\
     137                 :            :         }\
     138                 :            :         if (doHB) {\
     139                 :            :         _chs[node] += capacitance * NP(vnode);\
     140                 :            :         }
     141                 :            : 
     142                 :            : #define _save_whitenoise1(n1,pwr,type)\
     143                 :            :         _white_pwr[n1][n1] += pwr;
     144                 :            : #define _save_whitenoise2(n1,n2,pwr,type)\
     145                 :            :         _white_pwr[n1][n2] += pwr;
     146                 :            : #define _save_flickernoise1(n1,pwr,exp,type)\
     147                 :            :         _flicker_pwr[n1][n1] += pwr;\
     148                 :            :         _flicker_exp[n1][n1] += exp;
     149                 :            : #define _save_flickernoise2(n1,n2,pwr,exp,type)\
     150                 :            :         _flicker_pwr[n1][n2] += pwr;\
     151                 :            :         _flicker_exp[n1][n2] += exp;
     152                 :            : #define _load_whitenoise2(n1,n2,pwr)\
     153                 :            :         cy (n1,n2) -= pwr/kB/T0; cy (n2,n1) -= pwr/kB/T0;\
     154                 :            :         cy (n1,n1) += pwr/kB/T0; cy (n2,n2) += pwr/kB/T0;
     155                 :            : #define _load_whitenoise1(n1,pwr)\
     156                 :            :         cy (n1,n1) += pwr/kB/T0;
     157                 :            : #define _load_flickernoise2(n1,n2,pwr,exp)\
     158                 :            :         cy (n1,n2) -= pwr*pow(_freq,-exp)/kB/T0;\
     159                 :            :         cy (n2,n1) -= pwr*pow(_freq,-exp)/kB/T0;\
     160                 :            :         cy (n1,n1) += pwr*pow(_freq,-exp)/kB/T0;\
     161                 :            :         cy (n2,n2) += pwr*pow(_freq,-exp)/kB/T0;
     162                 :            : #define _load_flickernoise1(n1,pwr,exp)\
     163                 :            :         cy (n1,n1) += pwr*pow(_freq,-exp)/kB/T0;
     164                 :            : 
     165                 :            : // derivative helper macros
     166                 :            : // transcendental LRM p. 59
     167                 :            : #define m00_cos(v00,x)          v00 = cos(x);
     168                 :            : #define m10_cos(v10,v00,x)      v10 = (-sin(x));
     169                 :            : #define m00_sin(v00,x)          v00 = sin(x);
     170                 :            : #define m10_sin(v10,v00,x)      v10 = (cos(x));
     171                 :            : #define m00_tan(v00,x)          v00 = tan(x);
     172                 :            : #define m10_tan(v10,v00,x)      v10 = (1.0/cos(x)/cos(x));
     173                 :            : #define m00_cosh(v00,x)         v00 = cosh(x);
     174                 :            : #define m10_cosh(v10,v00,x)     v10 = (sinh(x));
     175                 :            : #define m00_sinh(v00,x)         v00 = sinh(x);
     176                 :            : #define m10_sinh(v10,v00,x)     v10 = (cosh(x));
     177                 :            : #define m00_tanh(v00,x)         v00 = tanh(x);
     178                 :            : #define m10_tanh(v10,v00,x)     v10 = (1.0/cosh(x)/cosh(x));
     179                 :            : #define m00_acos(v00,x)         v00 = acos(x);
     180                 :            : #define m10_acos(v10,v00,x)     v10 = (-1.0/sqrt(1-x*x));
     181                 :            : #define m00_asin(v00,x)         v00 = asin(x);
     182                 :            : #define m10_asin(v10,v00,x)     v10 = (+1.0/sqrt(1-x*x));
     183                 :            : #define m00_atan(v00,x)         v00 = atan(x);
     184                 :            : #define m10_atan(v10,v00,x)     v10 = (+1.0/(1+x*x));
     185                 :            : #define m00_hypot(v00,x,y)      v00 = sqrt((x)*(x)+(y)*(y));
     186                 :            : #define m10_hypot(v10,v00,x,y)  v10 = (x)/(v00);
     187                 :            : #define m11_hypot(v11,v00,x,y)  v11 = (y)/(v00);
     188                 :            : #define m00_atan2(v00,x,y)      v00 = atan2(x,y);
     189                 :            : // TODO atan2 derivatives ?
     190                 :            : #define m00_acosh(v00,x)        v00 = acosh(x);
     191                 :            : #define m10_acosh(v10,v00,x)    v10 = (1.0/(sqrt(x-1)*sqrt(x+1)));
     192                 :            : #define m00_asinh(v00,x)        v00 = asinh(x);
     193                 :            : #define m10_asinh(v10,v00,x)    v10 = (1.0/(sqrt(x*x+1)));
     194                 :            : #define m00_atanh(v00,x)        v00 = atanh(x);
     195                 :            : #define m10_atanh(v10,v00,x)    v10 = (1.0/(1-x*x));
     196                 :            : 
     197                 :            : 
     198                 :            : // standard functions LRM p.58
     199                 :            : #define m00_logE(v00,x)         v00 = log(x);
     200                 :            : #define m10_logE(v10,v00,x)     v10 = (1.0/x);
     201                 :            : #define m00_log10(v00,x)        v00 = log10(x);
     202                 :            : #define m10_log10(v10,v00,x)    v10 = (1.0/x/M_LN10);
     203                 :            : #define m00_exp(v00,x)          v00 = exp(x);
     204                 :            : #define m10_exp(v10,v00,x)      v10 = v00;
     205                 :            : #define m00_sqrt(v00,x)         v00 = sqrt(x);
     206                 :            : #define m10_sqrt(v10,v00,x)     v10 = (0.5/v00);
     207                 :            : #define m00_min(v00,x,y)        v00 = ((x)<(y))?(x):(y);
     208                 :            : #define m10_min(v10,v00,x,y)    v10 = ((x)<(y))?1.0:0.0;
     209                 :            : #define m11_min(v11,v00,x,y)    v11 = ((x)<(y))?0.0:1.0;
     210                 :            : #define m00_max(v00,x,y)        v00 = ((x)>(y))?(x):(y);
     211                 :            : #define m10_max(v10,v00,x,y)    v10 = ((x)>(y))?1.0:0.0;
     212                 :            : #define m11_max(v11,v00,x,y)    v11 = ((x)>(y))?0.0:1.0;
     213                 :            : #define m00_pow(v00,x,y)        v00 = pow(x,y);
     214                 :            : #define m10_pow(v10,v00,x,y)    v10 = (x==0.0)?0.0:(v00)*(y)/(x);
     215                 :            : #define m11_pow(v11,v00,x,y)    v11 = (x==0.0)?0.0:(log(x)*(v00));
     216                 :            : #define m00_abs(v00,x)          v00 = ((x)<(0)?(-(x)):(x));
     217                 :            : #define m10_abs(v10,v00,x)      v10 = (((x)>=0)?(+1.0):(-1.0));
     218                 :            : #define m00_floor(v00,x)        v00 = floor(x);
     219                 :            : #define m10_floor(v10,v00,x)    v10 = 1.0;
     220                 :            : 
     221                 :            : #define m00_ceil(v00,x)         v00 = ceil(x);
     222                 :            : // TODO ceil derivative, needed?
     223                 :            : 
     224                 :            : // analog operator, LRM p.61
     225                 :            : #define m00_limexp(v00,x)       v00 = ((x)<80.0?exp(x):exp(80.0)*(x-79.0));
     226                 :            : #define m10_limexp(v10,v00,x)   v10 = ((x)<80.0?(v00):exp(80.0));
     227                 :            : 
     228                 :            : // analog kernel parameter system functions, LRM p.215
     229                 :            : #define m00_vt(x)               (kBoverQ*(x))
     230                 :            : #define m10_vt(x)               (kBoverQ)
     231                 :            : 
     232                 :            : // extra functions (?)
     233                 :            : #define m00_div(v00,v10,x,y)    double v10=1/(y); double v00=(x)*v10;
     234                 :            : #define m10_div(v10,v00,vv,x,y)
     235                 :            : #define m11_div(v11,v00,vv,x,y) double v11 = -v00*vv;
     236                 :            : #define m00_mult(v00,v10,v11,x,y) double v10=(x); double v11=(y); double v00=v10*v11;
     237                 :            : #define m00_add(v00,x,y)        double v00=(x)+(y);
     238                 :            : 
     239                 :            : // second derivatives
     240                 :            : #define m20_logE(v00)           (-1.0/v00/v00)
     241                 :            : #define m20_exp(v00)            exp(v00)
     242                 :            : #define m20_limexp(v00)         ((v00)<80.0?exp(v00):0.0)
     243                 :            : #define m20_sqrt(v00)           (-0.25/(v00)/sqrt(v00))
     244                 :            : #define m20_abs(v00)           0.0
     245                 :            : #define m20_pow(x,y)            ((y)*((y)-1.0)*pow(x,y)/(x)/(x))
     246                 :            : 
     247                 :            : 
     248                 :            : // simulator specific definitions
     249                 :            : #define _modelname              "EKV26MOS"
     250                 :            : #define _instancename           getName()
     251                 :            : #define _circuit_temp           (getPropertyDouble("Temp")+273.15)
     252                 :            : #define _param_given(p)         (isPropertyGiven(p)?1:0)
     253                 :            : 
     254                 :            : 
     255                 :            : // $vt and $vt() functions
     256                 :            : #define _vt_nom                 (kBoverQ*_circuit_temp)
     257                 :            : 
     258                 :            : using namespace qucs::device;
     259                 :            : using qucs::matrix;
     260                 :            : 
     261                 :            : /* Device constructor. */
     262                 :          0 : EKV26MOS::EKV26MOS() : circuit (6)
     263                 :            : {
     264                 :          0 :   type = CIR_EKV26MOS;
     265                 :          0 : }
     266                 :            : 
     267                 :            : /* Initialization of model. */
     268                 :          0 : void EKV26MOS::initModel (void)
     269                 :            : {
     270                 :            :   // create internal nodes
     271                 :          0 :   setInternalNode (Drain_int, "Drain_int");
     272                 :          0 :   setInternalNode (Source_int, "Source_int");
     273                 :            : 
     274                 :            :   // get device model parameters
     275                 :          0 :   loadVariables ();
     276                 :            :   // evaluate global model equations
     277                 :          0 :   initializeModel ();
     278                 :            :   // evaluate initial step equations
     279                 :          0 :   initialStep ();
     280                 :            :   // evaluate global instance equations
     281                 :          0 :   initializeInstance ();
     282                 :          0 : }
     283                 :            : 
     284                 :            : /* Initialization of DC analysis. */
     285                 :          0 : void EKV26MOS::initDC (void)
     286                 :            : {
     287                 :          0 :   allocMatrixMNA ();
     288                 :          0 :   initModel ();
     289                 :          0 :   pol = 1;
     290                 :          0 :   restartDC ();
     291                 :          0 :   doAC = 1;
     292                 :          0 :   doTR = 0;
     293                 :          0 :   doHB = 0;
     294                 :          0 : }
     295                 :            : 
     296                 :            : /* Run when DC is restarted (fallback algorithms). */
     297                 :          0 : void EKV26MOS::restartDC (void)
     298                 :            : {
     299                 :          0 : }
     300                 :            : 
     301                 :            : /* Initialize Verilog-AMS code. */
     302                 :          0 : void EKV26MOS::initVerilog (void)
     303                 :            : {
     304                 :            :   // initialization of noise variables
     305                 :          0 :   _white_pwr[Drain_int][Drain] = 0.0;
     306                 :          0 :   _white_pwr[Source_int][Source] = 0.0;
     307                 :          0 :   _white_pwr[Source_int][Drain_int] = 0.0;
     308                 :          0 :   _white_pwr[Drain_int][Source_int] = 0.0;
     309                 :          0 :   _white_pwr[Source][Source_int] = 0.0;
     310                 :          0 :   _white_pwr[Drain][Drain_int] = 0.0;
     311                 :          0 :   _flicker_pwr[Source_int][Drain_int] = 0.0;
     312                 :          0 :   _flicker_exp[Source_int][Drain_int] = 0.0;
     313                 :          0 :   _flicker_pwr[Drain_int][Source_int] = 0.0;
     314                 :          0 :   _flicker_exp[Drain_int][Source_int] = 0.0;
     315                 :            : 
     316                 :            :   int i1, i2, i3, i4;
     317                 :            : 
     318                 :            :   // zero charges
     319         [ #  # ]:          0 :   for (i1 = 0; i1 < 6; i1++) {
     320         [ #  # ]:          0 :   for (i2 = 0; i2 < 6; i2++) {
     321                 :          0 :     _charges[i1][i2] = 0.0;
     322                 :            :   } }
     323                 :            : 
     324                 :            :   // zero capacitances
     325         [ #  # ]:          0 :   for (i1 = 0; i1 < 6; i1++) {
     326         [ #  # ]:          0 :   for (i2 = 0; i2 < 6; i2++) {
     327         [ #  # ]:          0 :   for (i3 = 0; i3 < 6; i3++) {
     328         [ #  # ]:          0 :   for (i4 = 0; i4 < 6; i4++) {
     329                 :          0 :     _caps[i1][i2][i3][i4] = 0.0;
     330                 :            :   } } } }
     331                 :            : 
     332                 :            :   // zero right hand side, static and dynamic jacobian
     333         [ #  # ]:          0 :   for (i1 = 0; i1 < 6; i1++) {
     334                 :          0 :     _rhs[i1] = 0.0;
     335                 :          0 :     _qhs[i1] = 0.0;
     336                 :          0 :     _chs[i1] = 0.0;
     337                 :          0 :     _ghs[i1] = 0.0;
     338         [ #  # ]:          0 :     for (i2 = 0; i2 < 6; i2++) {
     339                 :          0 :       _jstat[i1][i2] = 0.0;
     340                 :          0 :       _jdyna[i1][i2] = 0.0;
     341                 :            :     }
     342                 :            :   }
     343                 :          0 : }
     344                 :            : 
     345                 :            : /* Load device model input parameters. */
     346                 :          0 : void EKV26MOS::loadVariables (void)
     347                 :            : {
     348                 :          0 :   LEVEL = getPropertyDouble ("LEVEL");
     349                 :          0 :   L = getPropertyDouble ("L");
     350                 :          0 :   W = getPropertyDouble ("W");
     351                 :          0 :   Np = getPropertyDouble ("Np");
     352                 :          0 :   Ns = getPropertyDouble ("Ns");
     353                 :          0 :   Cox = getPropertyDouble ("Cox");
     354                 :          0 :   Xj = getPropertyDouble ("Xj");
     355                 :          0 :   Dw = getPropertyDouble ("Dw");
     356                 :          0 :   Dl = getPropertyDouble ("Dl");
     357                 :          0 :   Vto = getPropertyDouble ("Vto");
     358                 :          0 :   Gamma = getPropertyDouble ("Gamma");
     359                 :          0 :   Phi = getPropertyDouble ("Phi");
     360                 :          0 :   Kp = getPropertyDouble ("Kp");
     361                 :          0 :   Theta = getPropertyDouble ("Theta");
     362                 :          0 :   EO = getPropertyDouble ("EO");
     363                 :          0 :   Ucrit = getPropertyDouble ("Ucrit");
     364                 :          0 :   Lambda = getPropertyDouble ("Lambda");
     365                 :          0 :   Weta = getPropertyDouble ("Weta");
     366                 :          0 :   Leta = getPropertyDouble ("Leta");
     367                 :          0 :   Q0 = getPropertyDouble ("Q0");
     368                 :          0 :   Lk = getPropertyDouble ("Lk");
     369                 :          0 :   Tcv = getPropertyDouble ("Tcv");
     370                 :          0 :   Bex = getPropertyDouble ("Bex");
     371                 :          0 :   Ucex = getPropertyDouble ("Ucex");
     372                 :          0 :   Ibbt = getPropertyDouble ("Ibbt");
     373                 :          0 :   Hdif = getPropertyDouble ("Hdif");
     374                 :          0 :   Rsh = getPropertyDouble ("Rsh");
     375                 :          0 :   Rsc = getPropertyDouble ("Rsc");
     376                 :          0 :   Rdc = getPropertyDouble ("Rdc");
     377                 :          0 :   Cgso = getPropertyDouble ("Cgso");
     378                 :          0 :   Cgdo = getPropertyDouble ("Cgdo");
     379                 :          0 :   Cgbo = getPropertyDouble ("Cgbo");
     380                 :          0 :   Iba = getPropertyDouble ("Iba");
     381                 :          0 :   Ibb = getPropertyDouble ("Ibb");
     382                 :          0 :   Ibn = getPropertyDouble ("Ibn");
     383                 :          0 :   Kf = getPropertyDouble ("Kf");
     384                 :          0 :   Af = getPropertyDouble ("Af");
     385                 :          0 :   Avto = getPropertyDouble ("Avto");
     386                 :          0 :   Akp = getPropertyDouble ("Akp");
     387                 :          0 :   Agamma = getPropertyDouble ("Agamma");
     388                 :          0 :   N = getPropertyDouble ("N");
     389                 :          0 :   Is = getPropertyDouble ("Is");
     390                 :          0 :   Bv = getPropertyDouble ("Bv");
     391                 :          0 :   Ibv = getPropertyDouble ("Ibv");
     392                 :          0 :   Vj = getPropertyDouble ("Vj");
     393                 :          0 :   Cj0 = getPropertyDouble ("Cj0");
     394                 :          0 :   M = getPropertyDouble ("M");
     395                 :          0 :   Area = getPropertyDouble ("Area");
     396                 :          0 :   Fc = getPropertyDouble ("Fc");
     397                 :          0 :   Tt = getPropertyDouble ("Tt");
     398                 :          0 :   Xti = getPropertyDouble ("Xti");
     399                 :          0 :   Xpart = getPropertyDouble ("Xpart");
     400                 :          0 :   Tnom = getPropertyDouble ("Tnom");
     401                 :          0 :   nmos = getPropertyInteger ("nmos");
     402                 :          0 :   pmos = getPropertyInteger ("pmos");
     403                 :          0 : }
     404                 :            : 
     405                 :            : /* #define's for translated code */
     406                 :            : #undef  _DDT
     407                 :            : #define _DDT(q) q
     408                 :            : #define _DYNAMIC
     409                 :            : #define _DERIVATE
     410                 :            : #define _DDX
     411                 :            : #define _DERIVATEFORDDX
     412                 :            : 
     413                 :            : /* Evaluate Verilog-AMS equations in model initialization. */
     414                 :          0 : void EKV26MOS::initializeModel (void)
     415                 :            : {
     416                 :            : double Qb0;
     417                 :            : double deltaV_RSCE;
     418                 :            : double nnn;
     419                 :            : double xi;
     420                 :            : double C_epsilon;
     421                 :            : double Kpa;
     422                 :            : double Vtoa;
     423                 :            : #if defined(_DYNAMIC)
     424                 :            : #endif
     425                 :            : #if defined(_DYNAMIC)
     426                 :            : #endif
     427                 :            : #if defined(_DYNAMIC)
     428                 :            : #endif
     429                 :            : #if defined(_DYNAMIC)
     430                 :            : #endif
     431                 :            : #if defined(_DYNAMIC)
     432                 :            : #endif
     433                 :            : #if defined(_DYNAMIC)
     434                 :            : #endif
     435                 :            : #if defined(_DYNAMIC)
     436                 :            : #endif
     437                 :            : #if defined(_DYNAMIC)
     438                 :            : #endif
     439                 :            : #if defined(_DYNAMIC)
     440                 :            : #endif
     441                 :            : #if defined(_DYNAMIC)
     442                 :            : #endif
     443                 :            : #if defined(_DYNAMIC)
     444                 :            : #endif
     445                 :            : #if defined(_DYNAMIC)
     446                 :            : #endif
     447                 :            : double con2;
     448                 :            : double Is_T2;
     449                 :            : #if defined(_DYNAMIC)
     450                 :            : #endif
     451                 :            : #if defined(_DYNAMIC)
     452                 :            : double F2;
     453                 :            : #endif
     454                 :            : #if defined(_DYNAMIC)
     455                 :            : double F1;
     456                 :            : #endif
     457                 :            : #if defined(_DYNAMIC)
     458                 :            : double Cj0_T2;
     459                 :            : #endif
     460                 :            : #if defined(_DYNAMIC)
     461                 :            : #endif
     462                 :            : #if defined(_DYNAMIC)
     463                 :            : double Eg_T2;
     464                 :            : #endif
     465                 :            : double Eg_T1;
     466                 :            : double Vt_T2;
     467                 :            : double con1;
     468                 :            : double Leff;
     469                 :            : double Eg;
     470                 :            : double Egnom;
     471                 :            : double Vto_T;
     472                 :            : double Tratio;
     473                 :            : double T2;
     474                 :            : double Tnomk;
     475                 :            : double epsilonox;
     476                 :            : double epsilonsi;
     477                 :            : double B;
     478                 :            : double A;
     479                 :            : {
     480         [ #  # ]:          0 : if
     481                 :          0 : _param_given("nmos")
     482                 :            : {
     483                 :          0 : p_n_MOS=(+1);
     484                 :            : }
     485                 :            : else
     486                 :            : {
     487         [ #  # ]:          0 : if
     488                 :          0 : _param_given("pmos")
     489                 :            : {
     490                 :          0 : p_n_MOS=(-1);
     491                 :            : }
     492                 :            : else
     493                 :            : {
     494                 :          0 : p_n_MOS=(+1);
     495                 :            : }
     496                 :            : }
     497                 :          0 : A=7.02e-4;
     498                 :          0 : B=1108.0;
     499                 :          0 : epsilonsi=1.0359e-10;
     500                 :            : #if defined(_DYNAMIC)
     501                 :          0 : epsilonox=3.453143e-11;
     502                 :            : #endif
     503                 :          0 : Tnomk=(Tnom+273.15);
     504                 :          0 : T2=_circuit_temp;
     505                 :          0 : Tratio=(T2/Tnomk);
     506                 :          0 : Vto_T=(p_n_MOS*(Vto-(Tcv*(T2-Tnomk))));
     507                 :          0 : Egnom=(1.16-(((0.000702*Tnomk)*Tnomk)/(Tnomk+1108)));
     508                 :          0 : Eg=(1.16-(((0.000702*T2)*T2)/(T2+1108)));
     509                 :            : {
     510                 :          0 : double m00_logE(d00_logE0,Tratio)
     511                 :          0 : Phi_T=((((Phi*Tratio)-((3.0*_vt_nom)*d00_logE0))-(Egnom*Tratio))+Eg);
     512                 :            : }
     513                 :          0 : Ibb_T=(Ibb*(1.0+(Ibbt*(T2-Tnomk))));
     514                 :          0 : Weff=(W+Dw);
     515                 :          0 : Leff=(L+Dl);
     516                 :          0 : RDeff=(((((Hdif*Rsh)/Weff)/Np)+Rdc)+1e-9);
     517                 :          0 : RSeff=(((((Hdif*Rsh)/Weff)/Np)+Rsc)+1e-9);
     518                 :            : {
     519                 :          0 : double m00_sqrt(d00_sqrt0,(((Np*Weff)*Ns)*Leff))
     520                 :          0 : con1=d00_sqrt0;
     521                 :            : }
     522                 :          0 : Vt_T2=((1.3806503e-23*T2)/1.602176462e-19);
     523                 :          0 : Eg_T1=(Eg-(((A*Tnomk)*Tnomk)/(B+Tnomk)));
     524                 :            : #if defined(_DYNAMIC)
     525                 :          0 : Eg_T2=(Eg-(((A*T2)*T2)/(B+T2)));
     526                 :            : #endif
     527                 :            : #if defined(_DYNAMIC)
     528                 :            : {
     529                 :          0 : double m00_pow(d00_pow0,(T2/Tnomk),1.5)
     530                 :          0 : double m00_logE(d00_logE1,d00_pow0)
     531                 :          0 : Vj_T2=((((T2/Tnomk)*Vj)-((2*Vt_T2)*d00_logE1))-(((T2/Tnomk)*Eg_T1)-Eg_T2));
     532                 :            : }
     533                 :            : #endif
     534                 :            : #if defined(_DYNAMIC)
     535                 :          0 : Cj0_T2=(Cj0*(1+(M*((400e-6*(T2-Tnomk))-((Vj_T2-Vj)/Vj)))));
     536                 :            : #endif
     537                 :            : #if defined(_DYNAMIC)
     538                 :            : {
     539                 :          0 : double m00_pow(d00_pow0,(1-Fc),(1-M))
     540                 :          0 : F1=((Vj/(1-M))*(1-d00_pow0));
     541                 :            : }
     542                 :            : #endif
     543                 :            : #if defined(_DYNAMIC)
     544                 :            : {
     545                 :          0 : double m00_pow(d00_pow0,(1-Fc),(1+M))
     546                 :          0 : F2=d00_pow0;
     547                 :            : }
     548                 :            : #endif
     549                 :            : #if defined(_DYNAMIC)
     550                 :          0 : F3=(1-(Fc*(1+M)));
     551                 :            : #endif
     552                 :            : {
     553                 :          0 : double m00_pow(d00_pow0,(T2/Tnomk),(Xti/N))
     554         [ #  # ]:          0 : double m00_limexp(d00_limexp1,(((-Eg_T1)/Vt_T2)*(1-(T2/Tnomk))))
     555                 :          0 : Is_T2=((Is*d00_pow0)*d00_limexp1);
     556                 :            : }
     557                 :          0 : GMIN=1e-12;
     558                 :          0 : con2=((((Cox*Ns)*Np)*Weff)*Leff);
     559                 :          0 : fourkt=((4.0*1.3806503e-23)*T2);
     560                 :            : #if defined(_DYNAMIC)
     561                 :          0 : Area1=(Area*((Cj0_T2*Vj_T2)/(1-M)));
     562                 :            : #endif
     563                 :          0 : Area2=(Area*Is_T2);
     564                 :            : #if defined(_DYNAMIC)
     565                 :          0 : Area3=(Area*Cj0_T2);
     566                 :            : #endif
     567                 :            : #if defined(_DYNAMIC)
     568                 :          0 : DP1=(((Fc*Fc)*Vj_T2)*Vj_T2);
     569                 :            : #endif
     570                 :            : #if defined(_DYNAMIC)
     571                 :          0 : DP2=(M/(2.0*Vj_T2));
     572                 :            : #endif
     573                 :            : #if defined(_DYNAMIC)
     574                 :          0 : DP3=(Fc*Vj_T2);
     575                 :            : #endif
     576                 :            : #if defined(_DYNAMIC)
     577                 :          0 : DP4=(F1+(1/F2));
     578                 :            : #endif
     579                 :          0 : con4=((-Vto_T)+Phi_T);
     580                 :          0 : con7=(Gamma/2.0);
     581                 :          0 : con8=(con7*con7);
     582                 :          0 : con9=((16.0*_vt_nom)*_vt_nom);
     583                 :          0 : con10=(epsilonsi/Cox);
     584                 :          0 : con12=(0.1*_vt_nom);
     585                 :          0 : con14=(4.0*_vt_nom);
     586                 :          0 : con22=(Kp*(Weff/Leff));
     587                 :          0 : con23=(Kf/con2);
     588                 :            : #if defined(_DYNAMIC)
     589                 :          0 : con24=(con2*_vt_nom);
     590                 :            : #endif
     591                 :            : #if defined(_DYNAMIC)
     592                 :          0 : Spart=(1.0-Xpart);
     593                 :            : #endif
     594                 :          0 : con25=(fourkt/RDeff);
     595                 :          0 : con26=(fourkt/RSeff);
     596                 :            : #if defined(_DYNAMIC)
     597                 :          0 : con27=((Cgso*Weff)*Np);
     598                 :            : #endif
     599                 :            : #if defined(_DYNAMIC)
     600                 :          0 : con28=((Cgdo*Weff)*Np);
     601                 :            : #endif
     602                 :            : #if defined(_DYNAMIC)
     603                 :          0 : con29=((Cgbo*Leff)*Np);
     604                 :            : #endif
     605                 :          0 : con30=(4.0/3.0);
     606                 :          0 : con31=(1.0/(N*Vt_T2));
     607                 :          0 : con32=((5.0*N)*_vt_nom);
     608                 :            : #if defined(_DYNAMIC)
     609                 :          0 : con33=(Fc*Vj);
     610                 :            : #endif
     611         [ #  # ]:          0 : if
     612                 :            : (LEVEL==2)
     613                 :            : {
     614                 :            : {
     615                 :          0 : double m00_pow(d00_pow0,Tratio,Ucex)
     616                 :          0 : Ucrit_T=(Ucrit*d00_pow0);
     617                 :            : }
     618                 :            : #if defined(_DYNAMIC)
     619                 :          0 : Vtoa=((p_n_MOS*Vto)+(Avto/con1));
     620                 :            : #endif
     621                 :          0 : Kpa=(Kp*(1.0+(Akp/con1)));
     622                 :            : {
     623                 :          0 : double m00_pow(d00_pow0,Tratio,Bex)
     624                 :          0 : Kpa_T=(Kpa*d00_pow0);
     625                 :            : }
     626                 :          0 : Gammaa=(Gamma+(Agamma/con1));
     627                 :            : {
     628                 :          0 : double m00_pow(d00_pow0,22e-3,2.0)
     629                 :          0 : C_epsilon=(4.0*d00_pow0);
     630                 :            : }
     631                 :          0 : xi=(0.028*((10.0*(Leff/Lk))-1.0));
     632                 :            : {
     633                 :          0 : double m00_pow(d00_pow0,xi,2.0)
     634                 :          0 : double m00_sqrt(d00_sqrt1,(d00_pow0+C_epsilon))
     635                 :          0 : nnn=(1.0+(0.5*(xi+d00_sqrt1)));
     636                 :            : }
     637                 :            : {
     638                 :          0 : double m00_pow(d00_pow0,nnn,2.0)
     639                 :          0 : deltaV_RSCE=(((2.0*Q0)/Cox)*(1.0/d00_pow0));
     640                 :            : }
     641                 :          0 : con3=(((-Vto_T)-deltaV_RSCE)+Phi_T);
     642                 :          0 : con5=(Gammaa/2.0);
     643                 :          0 : con6=(con5*con5);
     644                 :          0 : con11=(Leta/Leff);
     645                 :          0 : con13=((3.0*Weta)/Weff);
     646                 :          0 : Vc=((Ucrit_T*Ns)*Leff);
     647                 :            : {
     648                 :          0 : double m00_logE(d00_logE0,(Vc/(2.0*_vt_nom)))
     649                 :          0 : con15=(_vt_nom*(d00_logE0-0.6));
     650                 :            : }
     651                 :          0 : con16=(1.0/64.0);
     652                 :            : {
     653                 :          0 : double m00_sqrt(d00_sqrt0,((epsilonsi/Cox)*Xj))
     654                 :          0 : Lc=d00_sqrt0;
     655                 :            : }
     656                 :          0 : Lmin=((Ns*Leff)/10.0);
     657         [ #  # ]:          0 : eta=((p_n_MOS==(+1))?0.5:(1/3));
     658                 :            : {
     659                 :          0 : double m00_sqrt(d00_sqrt0,Phi_T)
     660                 :          0 : Qb0=(Gammaa*d00_sqrt0);
     661                 :            : }
     662                 :          0 : con17=(1.0+((Cox/(EO*epsilonsi))*Qb0));
     663                 :          0 : con18=(Lambda*Lc);
     664                 :          0 : con19=(1.0/(Lc*Ucrit_T));
     665                 :          0 : con20=(Ns*Leff);
     666                 :          0 : con21=((Cox/(EO*epsilonsi))*_vt_nom);
     667                 :            : }
     668                 :            : }
     669                 :          0 : }
     670                 :            : 
     671                 :            : /* Evaluate Verilog-AMS equations in instance initialization. */
     672                 :          0 : void EKV26MOS::initializeInstance (void)
     673                 :            : {
     674                 :          0 : }
     675                 :            : 
     676                 :            : /* Evaluate Verilog-AMS equations in initial step. */
     677                 :          0 : void EKV26MOS::initialStep (void)
     678                 :            : {
     679                 :          0 : }
     680                 :            : 
     681                 :            : /* Evaluate Verilog-AMS equations in final step. */
     682                 :          0 : void EKV26MOS::finalStep (void)
     683                 :            : {
     684                 :          0 : }
     685                 :            : 
     686                 :            : /* Evaluate Verilog-AMS equations in analog block. */
     687                 :          0 : void EKV26MOS::calcVerilog (void)
     688                 :            : {
     689                 :            : 
     690                 :            : /* ----------------- evaluate verilog analog equations -------------------- */
     691                 :            : #if defined(_DYNAMIC)
     692                 :            : double Qs2;
     693                 :            : #if defined(_DERIVATE)
     694                 :            : double Qs2_VBulk_Drain_int;
     695                 :            : double Qs2_VBulk_Source_int;
     696                 :            : #endif
     697                 :            : #endif
     698                 :            : double Is2;
     699                 :            : #if defined(_DERIVATE)
     700                 :            : double Is2_VBulk_Drain_int;
     701                 :            : double Is2_VBulk_Source_int;
     702                 :            : #endif
     703                 :            : #if defined(_DYNAMIC)
     704                 :            : double Qs1;
     705                 :            : #if defined(_DERIVATE)
     706                 :            : double Qs1_VBulk_Drain_int;
     707                 :            : double Qs1_VBulk_Source_int;
     708                 :            : #endif
     709                 :            : #endif
     710                 :            : double Is1;
     711                 :            : #if defined(_DERIVATE)
     712                 :            : double Is1_VBulk_Drain_int;
     713                 :            : double Is1_VBulk_Source_int;
     714                 :            : #endif
     715                 :            : #if defined(_DYNAMIC)
     716                 :            : double Qd2;
     717                 :            : #if defined(_DERIVATE)
     718                 :            : double Qd2_VBulk_Source_int;
     719                 :            : double Qd2_VBulk_Drain_int;
     720                 :            : #endif
     721                 :            : #endif
     722                 :            : double Id2;
     723                 :            : #if defined(_DERIVATE)
     724                 :            : double Id2_VBulk_Source_int;
     725                 :            : double Id2_VBulk_Drain_int;
     726                 :            : #endif
     727                 :            : #if defined(_DYNAMIC)
     728                 :            : double Qd1;
     729                 :            : #if defined(_DERIVATE)
     730                 :            : double Qd1_VBulk_Source_int;
     731                 :            : double Qd1_VBulk_Drain_int;
     732                 :            : #endif
     733                 :            : #endif
     734                 :            : double Id1;
     735                 :            : #if defined(_DERIVATE)
     736                 :            : double Id1_VBulk_Source_int;
     737                 :            : double Id1_VBulk_Drain_int;
     738                 :            : #endif
     739                 :            : double V2;
     740                 :            : #if defined(_DERIVATE)
     741                 :            : double V2_VBulk_Drain_int;
     742                 :            : double V2_VBulk_Source_int;
     743                 :            : #endif
     744                 :            : double V1;
     745                 :            : #if defined(_DERIVATE)
     746                 :            : double V1_VBulk_Source_int;
     747                 :            : double V1_VBulk_Drain_int;
     748                 :            : #endif
     749                 :            : #if defined(_DYNAMIC)
     750                 :            : double qgbo;
     751                 :            : #if defined(_DERIVATE)
     752                 :            : double qgbo_VGate_Bulk;
     753                 :            : #endif
     754                 :            : #endif
     755                 :            : #if defined(_DYNAMIC)
     756                 :            : double qgdo;
     757                 :            : #if defined(_DERIVATE)
     758                 :            : double qgdo_VGate_Bulk;
     759                 :            : double qgdo_VSource_int_Bulk;
     760                 :            : double qgdo_VDrain_int_Bulk;
     761                 :            : #endif
     762                 :            : #endif
     763                 :            : #if defined(_DYNAMIC)
     764                 :            : double qgso;
     765                 :            : #if defined(_DERIVATE)
     766                 :            : double qgso_VGate_Bulk;
     767                 :            : double qgso_VDrain_int_Bulk;
     768                 :            : double qgso_VSource_int_Bulk;
     769                 :            : #endif
     770                 :            : #endif
     771                 :            : #if defined(_DYNAMIC)
     772                 :            : double qg;
     773                 :            : #if defined(_DERIVATE)
     774                 :            : double qg_VGate_Bulk;
     775                 :            : double qg_VDrain_int_Bulk;
     776                 :            : double qg_VSource_int_Bulk;
     777                 :            : #endif
     778                 :            : #endif
     779                 :            : #if defined(_DYNAMIC)
     780                 :            : double qb;
     781                 :            : #if defined(_DERIVATE)
     782                 :            : double qb_VGate_Bulk;
     783                 :            : double qb_VDrain_int_Bulk;
     784                 :            : double qb_VSource_int_Bulk;
     785                 :            : #endif
     786                 :            : #endif
     787                 :            : double Sflicker;
     788                 :            : #if defined(_DERIVATE)
     789                 :            : double Sflicker_VSource_int_Bulk;
     790                 :            : double Sflicker_VDrain_int_Bulk;
     791                 :            : double Sflicker_VGate_Bulk;
     792                 :            : #endif
     793                 :            : double gm;
     794                 :            : #if defined(_DERIVATE)
     795                 :            : double gm_VSource_int_Bulk;
     796                 :            : double gm_VDrain_int_Bulk;
     797                 :            : double gm_VGate_Bulk;
     798                 :            : #endif
     799                 :            : double Sthermal;
     800                 :            : #if defined(_DERIVATE)
     801                 :            : double Sthermal_VSource_int_Bulk;
     802                 :            : double Sthermal_VDrain_int_Bulk;
     803                 :            : double Sthermal_VGate_Bulk;
     804                 :            : #endif
     805                 :            : double Idb;
     806                 :            : #if defined(_DERIVATE)
     807                 :            : double Idb_VGate_Bulk;
     808                 :            : double Idb_VDrain_int_Bulk;
     809                 :            : double Idb_VSource_int_Bulk;
     810                 :            : #endif
     811                 :            : double Vib;
     812                 :            : #if defined(_DERIVATE)
     813                 :            : double Vib_VSource_int_Bulk;
     814                 :            : double Vib_VDrain_int_Bulk;
     815                 :            : double Vib_VGate_Bulk;
     816                 :            : #endif
     817                 :            : double Ids;
     818                 :            : #if defined(_DERIVATE)
     819                 :            : double Ids_VGate_Bulk;
     820                 :            : double Ids_VDrain_int_Bulk;
     821                 :            : double Ids_VSource_int_Bulk;
     822                 :            : #endif
     823                 :            : double Ispecific;
     824                 :            : #if defined(_DERIVATE)
     825                 :            : double Ispecific_VGate_Bulk;
     826                 :            : double Ispecific_VDrain_int_Bulk;
     827                 :            : double Ispecific_VSource_int_Bulk;
     828                 :            : #endif
     829                 :            : double Beta;
     830                 :            : #if defined(_DERIVATE)
     831                 :            : double Beta_VSource_int_Bulk;
     832                 :            : double Beta_VDrain_int_Bulk;
     833                 :            : double Beta_VGate_Bulk;
     834                 :            : #endif
     835                 :            : double qB;
     836                 :            : #if defined(_DERIVATE)
     837                 :            : double qB_VGate_Bulk;
     838                 :            : double qB_VDrain_int_Bulk;
     839                 :            : double qB_VSource_int_Bulk;
     840                 :            : #endif
     841                 :            : double qI;
     842                 :            : #if defined(_DERIVATE)
     843                 :            : double qI_VGate_Bulk;
     844                 :            : double qI_VDrain_int_Bulk;
     845                 :            : double qI_VSource_int_Bulk;
     846                 :            : #endif
     847                 :            : double Xr;
     848                 :            : #if defined(_DERIVATE)
     849                 :            : double Xr_VGate_Bulk;
     850                 :            : double Xr_VDrain_int_Bulk;
     851                 :            : double Xr_VSource_int_Bulk;
     852                 :            : #endif
     853                 :            : double Xf;
     854                 :            : #if defined(_DERIVATE)
     855                 :            : double Xf_VGate_Bulk;
     856                 :            : double Xf_VDrain_int_Bulk;
     857                 :            : double Xf_VSource_int_Bulk;
     858                 :            : #endif
     859                 :            : double nq;
     860                 :            : #if defined(_DERIVATE)
     861                 :            : double nq_VGate_Bulk;
     862                 :            : double nq_VDrain_int_Bulk;
     863                 :            : double nq_VSource_int_Bulk;
     864                 :            : #endif
     865                 :            : double Beta0prime;
     866                 :            : #if defined(_DERIVATE)
     867                 :            : double Beta0prime_VSource_int_Bulk;
     868                 :            : double Beta0prime_VDrain_int_Bulk;
     869                 :            : double Beta0prime_VGate_Bulk;
     870                 :            : #endif
     871                 :            : double Beta0;
     872                 :            : #if defined(_DERIVATE)
     873                 :            : double Beta0_VSource_int_Bulk;
     874                 :            : double Beta0_VDrain_int_Bulk;
     875                 :            : double Beta0_VGate_Bulk;
     876                 :            : #endif
     877                 :            : double irprime;
     878                 :            : #if defined(_DERIVATE)
     879                 :            : double irprime_VGate_Bulk;
     880                 :            : double irprime_VDrain_int_Bulk;
     881                 :            : double irprime_VSource_int_Bulk;
     882                 :            : #endif
     883                 :            : double X3;
     884                 :            : #if defined(_DERIVATE)
     885                 :            : double X3_VGate_Bulk;
     886                 :            : double X3_VDrain_int_Bulk;
     887                 :            : double X3_VSource_int_Bulk;
     888                 :            : #endif
     889                 :            : double Leq;
     890                 :            : #if defined(_DERIVATE)
     891                 :            : double Leq_VSource_int_Bulk;
     892                 :            : double Leq_VDrain_int_Bulk;
     893                 :            : double Leq_VGate_Bulk;
     894                 :            : #endif
     895                 :            : double Lprime;
     896                 :            : #if defined(_DERIVATE)
     897                 :            : double Lprime_VSource_int_Bulk;
     898                 :            : double Lprime_VDrain_int_Bulk;
     899                 :            : double Lprime_VGate_Bulk;
     900                 :            : #endif
     901                 :            : double DeltaL;
     902                 :            : #if defined(_DERIVATE)
     903                 :            : double DeltaL_VSource_int_Bulk;
     904                 :            : double DeltaL_VDrain_int_Bulk;
     905                 :            : double DeltaL_VGate_Bulk;
     906                 :            : #endif
     907                 :            : double Vip;
     908                 :            : #if defined(_DERIVATE)
     909                 :            : double Vip_VGate_Bulk;
     910                 :            : double Vip_VDrain_int_Bulk;
     911                 :            : double Vip_VSource_int_Bulk;
     912                 :            : #endif
     913                 :            : double Vdso2;
     914                 :            : #if defined(_DERIVATE)
     915                 :            : double Vdso2_VSource_int_Bulk;
     916                 :            : double Vdso2_VDrain_int_Bulk;
     917                 :            : #endif
     918                 :            : double deltaV;
     919                 :            : #if defined(_DERIVATE)
     920                 :            : double deltaV_VGate_Bulk;
     921                 :            : double deltaV_VDrain_int_Bulk;
     922                 :            : double deltaV_VSource_int_Bulk;
     923                 :            : #endif
     924                 :            : double Vdssprime;
     925                 :            : #if defined(_DERIVATE)
     926                 :            : double Vdssprime_VGate_Bulk;
     927                 :            : double Vdssprime_VDrain_int_Bulk;
     928                 :            : double Vdssprime_VSource_int_Bulk;
     929                 :            : #endif
     930                 :            : double Vdss;
     931                 :            : #if defined(_DERIVATE)
     932                 :            : double Vdss_VGate_Bulk;
     933                 :            : double Vdss_VDrain_int_Bulk;
     934                 :            : double Vdss_VSource_int_Bulk;
     935                 :            : #endif
     936                 :            : double ir;
     937                 :            : #if defined(_DERIVATE)
     938                 :            : double ir_VGate_Bulk;
     939                 :            : double ir_VDrain_int_Bulk;
     940                 :            : double ir_VSource_int_Bulk;
     941                 :            : #endif
     942                 :            : double X2;
     943                 :            : #if defined(_DERIVATE)
     944                 :            : double X2_VGate_Bulk;
     945                 :            : double X2_VDrain_int_Bulk;
     946                 :            : double X2_VSource_int_Bulk;
     947                 :            : #endif
     948                 :            : double iff;
     949                 :            : #if defined(_DERIVATE)
     950                 :            : double iff_VGate_Bulk;
     951                 :            : double iff_VDrain_int_Bulk;
     952                 :            : double iff_VSource_int_Bulk;
     953                 :            : #endif
     954                 :            : double T_1;
     955                 :            : #if defined(_DERIVATE)
     956                 :            : double T_1_VGate_Bulk;
     957                 :            : double T_1_VDrain_int_Bulk;
     958                 :            : double T_1_VSource_int_Bulk;
     959                 :            : #endif
     960                 :            : double X1;
     961                 :            : #if defined(_DERIVATE)
     962                 :            : double X1_VGate_Bulk;
     963                 :            : double X1_VDrain_int_Bulk;
     964                 :            : double X1_VSource_int_Bulk;
     965                 :            : #endif
     966                 :            : double n;
     967                 :            : #if defined(_DERIVATE)
     968                 :            : double n_VGate_Bulk;
     969                 :            : double n_VDrain_int_Bulk;
     970                 :            : double n_VSource_int_Bulk;
     971                 :            : #endif
     972                 :            : double Vp;
     973                 :            : #if defined(_DERIVATE)
     974                 :            : double Vp_VGate_Bulk;
     975                 :            : double Vp_VDrain_int_Bulk;
     976                 :            : double Vp_VSource_int_Bulk;
     977                 :            : #endif
     978                 :            : double Gammaprime;
     979                 :            : #if defined(_DERIVATE)
     980                 :            : double Gammaprime_VDrain_int_Bulk;
     981                 :            : double Gammaprime_VSource_int_Bulk;
     982                 :            : double Gammaprime_VGate_Bulk;
     983                 :            : #endif
     984                 :            : double Gamma0;
     985                 :            : #if defined(_DERIVATE)
     986                 :            : double Gamma0_VDrain_int_Bulk;
     987                 :            : double Gamma0_VSource_int_Bulk;
     988                 :            : double Gamma0_VGate_Bulk;
     989                 :            : #endif
     990                 :            : double VDprime;
     991                 :            : #if defined(_DERIVATE)
     992                 :            : double VDprime_VSource_int_Bulk;
     993                 :            : double VDprime_VDrain_int_Bulk;
     994                 :            : #endif
     995                 :            : double VSprime;
     996                 :            : #if defined(_DERIVATE)
     997                 :            : double VSprime_VDrain_int_Bulk;
     998                 :            : double VSprime_VSource_int_Bulk;
     999                 :            : #endif
    1000                 :            : double VP0;
    1001                 :            : #if defined(_DERIVATE)
    1002                 :            : double VP0_VGate_Bulk;
    1003                 :            : #endif
    1004                 :            : double VGprime;
    1005                 :            : #if defined(_DERIVATE)
    1006                 :            : double VGprime_VGate_Bulk;
    1007                 :            : #endif
    1008                 :            : double VD;
    1009                 :            : #if defined(_DERIVATE)
    1010                 :            : double VD_VSource_int_Bulk;
    1011                 :            : double VD_VDrain_int_Bulk;
    1012                 :            : #endif
    1013                 :            : double VS;
    1014                 :            : #if defined(_DERIVATE)
    1015                 :            : double VS_VDrain_int_Bulk;
    1016                 :            : double VS_VSource_int_Bulk;
    1017                 :            : #endif
    1018                 :            : double StoDswap;
    1019                 :            : double VG;
    1020                 :            : #if defined(_DERIVATE)
    1021                 :            : double VG_VGate_Bulk;
    1022                 :            : #endif
    1023                 :            : double Vd;
    1024                 :            : #if defined(_DERIVATE)
    1025                 :            : double Vd_VDrain_int_Bulk;
    1026                 :            : #endif
    1027                 :            : double Vs;
    1028                 :            : #if defined(_DERIVATE)
    1029                 :            : double Vs_VSource_int_Bulk;
    1030                 :            : #endif
    1031                 :            : double Vg;
    1032                 :            : #if defined(_DERIVATE)
    1033                 :            : double Vg_VGate_Bulk;
    1034                 :            : #endif
    1035                 :            : #if defined(_DERIVATE)
    1036                 :          0 : Vg_VGate_Bulk=(p_n_MOS);
    1037                 :            : #endif
    1038         [ #  # ]:          0 : Vg=(p_n_MOS*BP(Gate,Bulk));
    1039                 :            : #if defined(_DERIVATE)
    1040                 :          0 : Vs_VSource_int_Bulk=(p_n_MOS);
    1041                 :            : #endif
    1042         [ #  # ]:          0 : Vs=(p_n_MOS*BP(Source_int,Bulk));
    1043                 :            : #if defined(_DERIVATE)
    1044                 :          0 : Vd_VDrain_int_Bulk=(p_n_MOS);
    1045                 :            : #endif
    1046         [ #  # ]:          0 : Vd=(p_n_MOS*BP(Drain_int,Bulk));
    1047                 :            : #if defined(_DERIVATE)
    1048                 :          0 : VG_VGate_Bulk=Vg_VGate_Bulk;
    1049                 :            : #endif
    1050                 :          0 : VG=Vg;
    1051         [ #  # ]:          0 : if
    1052                 :            : ((Vd-Vs)>=0.0)
    1053                 :            : {
    1054                 :          0 : StoDswap=1.0;
    1055                 :            : #if defined(_DERIVATE)
    1056                 :          0 : VS_VDrain_int_Bulk=0.0;
    1057                 :          0 : VS_VSource_int_Bulk=Vs_VSource_int_Bulk;
    1058                 :            : #endif
    1059                 :          0 : VS=Vs;
    1060                 :            : #if defined(_DERIVATE)
    1061                 :          0 : VD_VSource_int_Bulk=0.0;
    1062                 :          0 : VD_VDrain_int_Bulk=Vd_VDrain_int_Bulk;
    1063                 :            : #endif
    1064                 :          0 : VD=Vd;
    1065                 :            : }
    1066                 :            : else
    1067                 :            : {
    1068                 :          0 : StoDswap=(-1.0);
    1069                 :            : #if defined(_DERIVATE)
    1070                 :          0 : VD_VSource_int_Bulk=Vs_VSource_int_Bulk;
    1071                 :          0 : VD_VDrain_int_Bulk=0.0;
    1072                 :            : #endif
    1073                 :          0 : VD=Vs;
    1074                 :            : #if defined(_DERIVATE)
    1075                 :          0 : VS_VDrain_int_Bulk=Vd_VDrain_int_Bulk;
    1076                 :          0 : VS_VSource_int_Bulk=0.0;
    1077                 :            : #endif
    1078                 :          0 : VS=Vd;
    1079                 :            : }
    1080         [ #  # ]:          0 : if
    1081                 :            : (LEVEL==2)
    1082                 :            : {
    1083                 :            : {
    1084                 :          0 : double m00_sqrt(d00_sqrt0,Phi_T)
    1085                 :            : #if defined(_DERIVATE)
    1086                 :          0 : VGprime_VGate_Bulk=VG_VGate_Bulk;
    1087                 :            : #endif
    1088                 :          0 : VGprime=((VG+con3)+(Gammaa*d00_sqrt0));
    1089                 :            : }
    1090                 :            : }
    1091                 :            : else
    1092                 :            : {
    1093                 :            : {
    1094                 :          0 : double m00_sqrt(d00_sqrt0,Phi_T)
    1095                 :            : #if defined(_DERIVATE)
    1096                 :          0 : VGprime_VGate_Bulk=VG_VGate_Bulk;
    1097                 :            : #endif
    1098                 :          0 : VGprime=((VG+con4)+(Gamma*d00_sqrt0));
    1099                 :            : }
    1100                 :            : }
    1101         [ #  # ]:          0 : if
    1102                 :            : (LEVEL==2)
    1103                 :            : {
    1104         [ #  # ]:          0 : if
    1105                 :            : (VGprime>0)
    1106                 :            : {
    1107                 :            : {
    1108                 :          0 : double m00_sqrt(d00_sqrt0,(VGprime+con6))
    1109                 :            : #if defined(_DERIVATE)
    1110                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,(VGprime+con6))
    1111                 :            : #endif
    1112                 :            : #if defined(_DERIVATE)
    1113                 :          0 : VP0_VGate_Bulk=(VGprime_VGate_Bulk-(Gammaa*VGprime_VGate_Bulk*d10_sqrt0));
    1114                 :            : #endif
    1115                 :          0 : VP0=((VGprime-Phi_T)-(Gammaa*(d00_sqrt0-con5)));
    1116                 :            : }
    1117                 :            : }
    1118                 :            : else
    1119                 :            : {
    1120                 :            : #if defined(_DERIVATE)
    1121                 :          0 : VP0_VGate_Bulk=0.0;
    1122                 :            : #endif
    1123                 :          0 : VP0=(-Phi_T);
    1124                 :            : }
    1125                 :            : {
    1126                 :          0 : double m00_sqrt(d00_sqrt0,(((VS+Phi_T)*(VS+Phi_T))+con9))
    1127                 :            : #if defined(_DERIVATE)
    1128                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,(((VS+Phi_T)*(VS+Phi_T))+con9))
    1129                 :            : #endif
    1130                 :            : #if defined(_DERIVATE)
    1131                 :          0 : VSprime_VDrain_int_Bulk=(0.5*(VS_VDrain_int_Bulk+((VS_VDrain_int_Bulk*(VS+Phi_T))+((VS+Phi_T)*VS_VDrain_int_Bulk))*d10_sqrt0));
    1132                 :          0 : VSprime_VSource_int_Bulk=(0.5*(VS_VSource_int_Bulk+((VS_VSource_int_Bulk*(VS+Phi_T))+((VS+Phi_T)*VS_VSource_int_Bulk))*d10_sqrt0));
    1133                 :            : #endif
    1134                 :          0 : VSprime=(0.5*((VS+Phi_T)+d00_sqrt0));
    1135                 :            : }
    1136                 :            : {
    1137                 :          0 : double m00_sqrt(d00_sqrt0,(((VD+Phi_T)*(VD+Phi_T))+con9))
    1138                 :            : #if defined(_DERIVATE)
    1139                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,(((VD+Phi_T)*(VD+Phi_T))+con9))
    1140                 :            : #endif
    1141                 :            : #if defined(_DERIVATE)
    1142                 :          0 : VDprime_VSource_int_Bulk=(0.5*(VD_VSource_int_Bulk+((VD_VSource_int_Bulk*(VD+Phi_T))+((VD+Phi_T)*VD_VSource_int_Bulk))*d10_sqrt0));
    1143                 :          0 : VDprime_VDrain_int_Bulk=(0.5*(VD_VDrain_int_Bulk+((VD_VDrain_int_Bulk*(VD+Phi_T))+((VD+Phi_T)*VD_VDrain_int_Bulk))*d10_sqrt0));
    1144                 :            : #endif
    1145                 :          0 : VDprime=(0.5*((VD+Phi_T)+d00_sqrt0));
    1146                 :            : }
    1147                 :            : {
    1148                 :          0 : double m00_sqrt(d00_sqrt0,VSprime)
    1149                 :          0 : double m00_sqrt(d00_sqrt1,VDprime)
    1150                 :          0 : double m00_sqrt(d00_sqrt2,(VP0+Phi_T))
    1151                 :            : #if defined(_DERIVATE)
    1152                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,VSprime)
    1153                 :          0 : double m10_sqrt(d10_sqrt1,d00_sqrt1,VDprime)
    1154                 :          0 : double m10_sqrt(d10_sqrt2,d00_sqrt2,(VP0+Phi_T))
    1155                 :            : #endif
    1156                 :            : #if defined(_DERIVATE)
    1157                 :          0 : Gamma0_VDrain_int_Bulk=(-(con10*(con11*(VSprime_VDrain_int_Bulk*d10_sqrt0+VDprime_VDrain_int_Bulk*d10_sqrt1))));
    1158                 :          0 : Gamma0_VSource_int_Bulk=(-(con10*(con11*(VSprime_VSource_int_Bulk*d10_sqrt0+VDprime_VSource_int_Bulk*d10_sqrt1))));
    1159                 :          0 : Gamma0_VGate_Bulk=(-(con10*(-(con13*VP0_VGate_Bulk*d10_sqrt2))));
    1160                 :            : #endif
    1161                 :          0 : Gamma0=(Gammaa-(con10*((con11*(d00_sqrt0+d00_sqrt1))-(con13*d00_sqrt2))));
    1162                 :            : }
    1163                 :            : {
    1164                 :          0 : double m00_sqrt(d00_sqrt0,((Gamma0*Gamma0)+con12))
    1165                 :            : #if defined(_DERIVATE)
    1166                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((Gamma0*Gamma0)+con12))
    1167                 :            : #endif
    1168                 :            : #if defined(_DERIVATE)
    1169                 :          0 : Gammaprime_VDrain_int_Bulk=(0.5*(Gamma0_VDrain_int_Bulk+((Gamma0_VDrain_int_Bulk*Gamma0)+(Gamma0*Gamma0_VDrain_int_Bulk))*d10_sqrt0));
    1170                 :          0 : Gammaprime_VSource_int_Bulk=(0.5*(Gamma0_VSource_int_Bulk+((Gamma0_VSource_int_Bulk*Gamma0)+(Gamma0*Gamma0_VSource_int_Bulk))*d10_sqrt0));
    1171                 :          0 : Gammaprime_VGate_Bulk=(0.5*(Gamma0_VGate_Bulk+((Gamma0_VGate_Bulk*Gamma0)+(Gamma0*Gamma0_VGate_Bulk))*d10_sqrt0));
    1172                 :            : #endif
    1173                 :          0 : Gammaprime=(0.5*(Gamma0+d00_sqrt0));
    1174                 :            : }
    1175         [ #  # ]:          0 : if
    1176                 :            : (VGprime>0.0)
    1177                 :            : {
    1178                 :            : {
    1179                 :          0 : double m00_sqrt(d00_sqrt0,(VGprime+((0.25*Gammaprime)*Gammaprime)))
    1180                 :            : #if defined(_DERIVATE)
    1181                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,(VGprime+((0.25*Gammaprime)*Gammaprime)))
    1182                 :            : #endif
    1183                 :            : #if defined(_DERIVATE)
    1184                 :          0 : Vp_VGate_Bulk=(VGprime_VGate_Bulk-((Gammaprime_VGate_Bulk*(d00_sqrt0-(0.5*Gammaprime)))+(Gammaprime*((VGprime_VGate_Bulk+(((0.25*Gammaprime_VGate_Bulk)*Gammaprime)+((0.25*Gammaprime)*Gammaprime_VGate_Bulk)))*d10_sqrt0-(0.5*Gammaprime_VGate_Bulk)))));
    1185                 :          0 : Vp_VDrain_int_Bulk=(-((Gammaprime_VDrain_int_Bulk*(d00_sqrt0-(0.5*Gammaprime)))+(Gammaprime*((((0.25*Gammaprime_VDrain_int_Bulk)*Gammaprime)+((0.25*Gammaprime)*Gammaprime_VDrain_int_Bulk))*d10_sqrt0-(0.5*Gammaprime_VDrain_int_Bulk)))));
    1186                 :          0 : Vp_VSource_int_Bulk=(-((Gammaprime_VSource_int_Bulk*(d00_sqrt0-(0.5*Gammaprime)))+(Gammaprime*((((0.25*Gammaprime_VSource_int_Bulk)*Gammaprime)+((0.25*Gammaprime)*Gammaprime_VSource_int_Bulk))*d10_sqrt0-(0.5*Gammaprime_VSource_int_Bulk)))));
    1187                 :            : #endif
    1188                 :          0 : Vp=((VGprime-Phi_T)-(Gammaprime*(d00_sqrt0-(0.5*Gammaprime))));
    1189                 :            : }
    1190                 :            : }
    1191                 :            : else
    1192                 :            : {
    1193                 :            : #if defined(_DERIVATE)
    1194                 :          0 : Vp_VGate_Bulk=0.0;
    1195                 :          0 : Vp_VDrain_int_Bulk=0.0;
    1196                 :          0 : Vp_VSource_int_Bulk=0.0;
    1197                 :            : #endif
    1198                 :          0 : Vp=(-Phi_T);
    1199                 :            : }
    1200                 :            : {
    1201                 :          0 : double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+con14))
    1202                 :            : #if defined(_DERIVATE)
    1203                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+con14))
    1204                 :            : #endif
    1205                 :            : #if defined(_DERIVATE)
    1206                 :          0 : n_VGate_Bulk=(-Gammaa*(2.0*Vp_VGate_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1207                 :          0 : n_VDrain_int_Bulk=(-Gammaa*(2.0*Vp_VDrain_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1208                 :          0 : n_VSource_int_Bulk=(-Gammaa*(2.0*Vp_VSource_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1209                 :            : #endif
    1210                 :          0 : n=(1.0+(Gammaa/(2.0*d00_sqrt0)));
    1211                 :            : }
    1212                 :            : }
    1213                 :            : else
    1214                 :            : {
    1215         [ #  # ]:          0 : if
    1216                 :            : (VGprime>0)
    1217                 :            : {
    1218                 :            : {
    1219                 :          0 : double m00_sqrt(d00_sqrt0,(VGprime+con8))
    1220                 :            : #if defined(_DERIVATE)
    1221                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,(VGprime+con8))
    1222                 :            : #endif
    1223                 :            : #if defined(_DERIVATE)
    1224                 :          0 : Vp_VGate_Bulk=(VGprime_VGate_Bulk-(Gamma*VGprime_VGate_Bulk*d10_sqrt0));
    1225                 :          0 : Vp_VDrain_int_Bulk=0.0;
    1226                 :          0 : Vp_VSource_int_Bulk=0.0;
    1227                 :            : #endif
    1228                 :          0 : Vp=((VGprime-Phi_T)-(Gamma*(d00_sqrt0-con7)));
    1229                 :            : }
    1230                 :            : }
    1231                 :            : else
    1232                 :            : {
    1233                 :            : #if defined(_DERIVATE)
    1234                 :          0 : Vp_VGate_Bulk=0.0;
    1235                 :          0 : Vp_VDrain_int_Bulk=0.0;
    1236                 :          0 : Vp_VSource_int_Bulk=0.0;
    1237                 :            : #endif
    1238                 :          0 : Vp=(-Phi_T);
    1239                 :            : }
    1240                 :            : {
    1241                 :          0 : double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+con14))
    1242                 :            : #if defined(_DERIVATE)
    1243                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+con14))
    1244                 :            : #endif
    1245                 :            : #if defined(_DERIVATE)
    1246                 :          0 : n_VGate_Bulk=(-Gamma*(2.0*Vp_VGate_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1247                 :          0 : n_VDrain_int_Bulk=(-Gamma*(2.0*Vp_VDrain_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1248                 :          0 : n_VSource_int_Bulk=(-Gamma*(2.0*Vp_VSource_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1249                 :            : #endif
    1250                 :          0 : n=(1.0+(Gamma/(2.0*d00_sqrt0)));
    1251                 :            : }
    1252                 :            : }
    1253                 :            : #if defined(_DERIVATE)
    1254                 :          0 : X1_VGate_Bulk=(Vp_VGate_Bulk/_vt_nom);
    1255                 :          0 : X1_VDrain_int_Bulk=((Vp_VDrain_int_Bulk-VS_VDrain_int_Bulk)/_vt_nom);
    1256                 :          0 : X1_VSource_int_Bulk=((Vp_VSource_int_Bulk-VS_VSource_int_Bulk)/_vt_nom);
    1257                 :            : #endif
    1258                 :          0 : X1=((Vp-VS)/_vt_nom);
    1259                 :            : {
    1260         [ #  # ]:          0 : double m00_limexp(d00_limexp0,(X1/2.0))
    1261                 :          0 : double m00_logE(d00_logE1,(1.0+d00_limexp0))
    1262                 :            : #if defined(_DERIVATE)
    1263         [ #  # ]:          0 : double m10_limexp(d10_limexp0,d00_limexp0,(X1/2.0))
    1264                 :          0 : double m10_logE(d10_logE1,d00_logE1,(1.0+d00_limexp0))
    1265                 :            : #endif
    1266                 :            : #if defined(_DERIVATE)
    1267                 :          0 : T_1_VGate_Bulk=(X1_VGate_Bulk/2.0)*d10_limexp0*d10_logE1;
    1268                 :          0 : T_1_VDrain_int_Bulk=(X1_VDrain_int_Bulk/2.0)*d10_limexp0*d10_logE1;
    1269                 :          0 : T_1_VSource_int_Bulk=(X1_VSource_int_Bulk/2.0)*d10_limexp0*d10_logE1;
    1270                 :            : #endif
    1271                 :          0 : T_1=d00_logE1;
    1272                 :            : }
    1273                 :            : #if defined(_DERIVATE)
    1274                 :          0 : iff_VGate_Bulk=((T_1_VGate_Bulk*T_1)+(T_1*T_1_VGate_Bulk));
    1275                 :          0 : iff_VDrain_int_Bulk=((T_1_VDrain_int_Bulk*T_1)+(T_1*T_1_VDrain_int_Bulk));
    1276                 :          0 : iff_VSource_int_Bulk=((T_1_VSource_int_Bulk*T_1)+(T_1*T_1_VSource_int_Bulk));
    1277                 :            : #endif
    1278                 :          0 : iff=(T_1*T_1);
    1279                 :            : #if defined(_DERIVATE)
    1280                 :          0 : X2_VGate_Bulk=(Vp_VGate_Bulk/_vt_nom);
    1281                 :          0 : X2_VDrain_int_Bulk=((Vp_VDrain_int_Bulk-VD_VDrain_int_Bulk)/_vt_nom);
    1282                 :          0 : X2_VSource_int_Bulk=((Vp_VSource_int_Bulk-VD_VSource_int_Bulk)/_vt_nom);
    1283                 :            : #endif
    1284                 :          0 : X2=((Vp-VD)/_vt_nom);
    1285                 :            : {
    1286         [ #  # ]:          0 : double m00_limexp(d00_limexp0,(X2/2.0))
    1287                 :          0 : double m00_logE(d00_logE1,(1.0+d00_limexp0))
    1288                 :            : #if defined(_DERIVATE)
    1289         [ #  # ]:          0 : double m10_limexp(d10_limexp0,d00_limexp0,(X2/2.0))
    1290                 :          0 : double m10_logE(d10_logE1,d00_logE1,(1.0+d00_limexp0))
    1291                 :            : #endif
    1292                 :            : #if defined(_DERIVATE)
    1293                 :          0 : T_1_VGate_Bulk=(X2_VGate_Bulk/2.0)*d10_limexp0*d10_logE1;
    1294                 :          0 : T_1_VDrain_int_Bulk=(X2_VDrain_int_Bulk/2.0)*d10_limexp0*d10_logE1;
    1295                 :          0 : T_1_VSource_int_Bulk=(X2_VSource_int_Bulk/2.0)*d10_limexp0*d10_logE1;
    1296                 :            : #endif
    1297                 :          0 : T_1=d00_logE1;
    1298                 :            : }
    1299                 :            : #if defined(_DERIVATE)
    1300                 :          0 : ir_VGate_Bulk=((T_1_VGate_Bulk*T_1)+(T_1*T_1_VGate_Bulk));
    1301                 :          0 : ir_VDrain_int_Bulk=((T_1_VDrain_int_Bulk*T_1)+(T_1*T_1_VDrain_int_Bulk));
    1302                 :          0 : ir_VSource_int_Bulk=((T_1_VSource_int_Bulk*T_1)+(T_1*T_1_VSource_int_Bulk));
    1303                 :            : #endif
    1304                 :          0 : ir=(T_1*T_1);
    1305         [ #  # ]:          0 : if
    1306                 :            : (LEVEL==2)
    1307                 :            : {
    1308                 :            : {
    1309                 :          0 : double m00_sqrt(d00_sqrt0,iff)
    1310                 :          0 : double m00_sqrt(d00_sqrt1,(0.25+((_vt_nom/Vc)*d00_sqrt0)))
    1311                 :            : #if defined(_DERIVATE)
    1312                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,iff)
    1313                 :          0 : double m10_sqrt(d10_sqrt1,d00_sqrt1,(0.25+((_vt_nom/Vc)*d00_sqrt0)))
    1314                 :            : #endif
    1315                 :            : #if defined(_DERIVATE)
    1316                 :          0 : Vdss_VGate_Bulk=(Vc*((_vt_nom/Vc)*iff_VGate_Bulk*d10_sqrt0)*d10_sqrt1);
    1317                 :          0 : Vdss_VDrain_int_Bulk=(Vc*((_vt_nom/Vc)*iff_VDrain_int_Bulk*d10_sqrt0)*d10_sqrt1);
    1318                 :          0 : Vdss_VSource_int_Bulk=(Vc*((_vt_nom/Vc)*iff_VSource_int_Bulk*d10_sqrt0)*d10_sqrt1);
    1319                 :            : #endif
    1320                 :          0 : Vdss=(Vc*(d00_sqrt1-0.5));
    1321                 :            : }
    1322                 :            : {
    1323                 :          0 : double m00_sqrt(d00_sqrt0,iff)
    1324                 :          0 : double m00_logE(d00_logE1,iff)
    1325                 :          0 : double m00_sqrt(d00_sqrt2,(0.25+((_vt_nom/Vc)*(d00_sqrt0-(0.75*d00_logE1)))))
    1326                 :            : #if defined(_DERIVATE)
    1327                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,iff)
    1328                 :          0 : double m10_logE(d10_logE1,d00_logE1,iff)
    1329                 :          0 : double m10_sqrt(d10_sqrt2,d00_sqrt2,(0.25+((_vt_nom/Vc)*(d00_sqrt0-(0.75*d00_logE1)))))
    1330                 :            : #endif
    1331                 :            : #if defined(_DERIVATE)
    1332                 :          0 : Vdssprime_VGate_Bulk=(Vc*((_vt_nom/Vc)*(iff_VGate_Bulk*d10_sqrt0-(0.75*iff_VGate_Bulk*d10_logE1)))*d10_sqrt2);
    1333                 :          0 : Vdssprime_VDrain_int_Bulk=(Vc*((_vt_nom/Vc)*(iff_VDrain_int_Bulk*d10_sqrt0-(0.75*iff_VDrain_int_Bulk*d10_logE1)))*d10_sqrt2);
    1334                 :          0 : Vdssprime_VSource_int_Bulk=(Vc*((_vt_nom/Vc)*(iff_VSource_int_Bulk*d10_sqrt0-(0.75*iff_VSource_int_Bulk*d10_logE1)))*d10_sqrt2);
    1335                 :            : #endif
    1336                 :          0 : Vdssprime=((Vc*(d00_sqrt2-0.5))+con15);
    1337                 :            : }
    1338                 :            : {
    1339                 :          0 : double m00_sqrt(d00_sqrt0,iff)
    1340 [ #  # ][ #  # ]:          0 : if
    1341                 :          0 : (Lambda*(d00_sqrt0>(Vdss/_vt_nom)))
    1342                 :            : {
    1343                 :            : {
    1344                 :          0 : double m00_sqrt(d00_sqrt0,iff)
    1345                 :          0 : double m00_sqrt(d00_sqrt1,((Lambda*(d00_sqrt0-(Vdss/_vt_nom)))+con16))
    1346                 :            : #if defined(_DERIVATE)
    1347                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,iff)
    1348                 :          0 : double m10_sqrt(d10_sqrt1,d00_sqrt1,((Lambda*(d00_sqrt0-(Vdss/_vt_nom)))+con16))
    1349                 :            : #endif
    1350                 :            : #if defined(_DERIVATE)
    1351                 :          0 : deltaV_VGate_Bulk=(con14*(Lambda*(iff_VGate_Bulk*d10_sqrt0-(Vdss_VGate_Bulk/_vt_nom)))*d10_sqrt1);
    1352                 :          0 : deltaV_VDrain_int_Bulk=(con14*(Lambda*(iff_VDrain_int_Bulk*d10_sqrt0-(Vdss_VDrain_int_Bulk/_vt_nom)))*d10_sqrt1);
    1353                 :          0 : deltaV_VSource_int_Bulk=(con14*(Lambda*(iff_VSource_int_Bulk*d10_sqrt0-(Vdss_VSource_int_Bulk/_vt_nom)))*d10_sqrt1);
    1354                 :            : #endif
    1355                 :          0 : deltaV=(con14*d00_sqrt1);
    1356                 :            : }
    1357                 :            : }
    1358                 :            : else
    1359                 :            : {
    1360                 :            : #if defined(_DERIVATE)
    1361                 :          0 : deltaV_VGate_Bulk=0.0;
    1362                 :          0 : deltaV_VDrain_int_Bulk=0.0;
    1363                 :          0 : deltaV_VSource_int_Bulk=0.0;
    1364                 :            : #endif
    1365                 :          0 : deltaV=con16;
    1366                 :            : }
    1367                 :            : }
    1368                 :            : #if defined(_DERIVATE)
    1369                 :          0 : Vdso2_VSource_int_Bulk=(0.5*(VD_VSource_int_Bulk-VS_VSource_int_Bulk));
    1370                 :          0 : Vdso2_VDrain_int_Bulk=(0.5*(VD_VDrain_int_Bulk-VS_VDrain_int_Bulk));
    1371                 :            : #endif
    1372                 :          0 : Vdso2=(0.5*(VD-VS));
    1373                 :            : {
    1374                 :          0 : double m00_sqrt(d00_sqrt0,((Vdss*Vdss)+(deltaV*deltaV)))
    1375                 :          0 : double m00_sqrt(d00_sqrt1,(((Vdso2-Vdss)*(Vdso2-Vdss))+(deltaV*deltaV)))
    1376                 :            : #if defined(_DERIVATE)
    1377                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vdss*Vdss)+(deltaV*deltaV)))
    1378                 :          0 : double m10_sqrt(d10_sqrt1,d00_sqrt1,(((Vdso2-Vdss)*(Vdso2-Vdss))+(deltaV*deltaV)))
    1379                 :            : #endif
    1380                 :            : #if defined(_DERIVATE)
    1381                 :          0 : Vip_VGate_Bulk=((((Vdss_VGate_Bulk*Vdss)+(Vdss*Vdss_VGate_Bulk))+((deltaV_VGate_Bulk*deltaV)+(deltaV*deltaV_VGate_Bulk)))*d10_sqrt0-((((-Vdss_VGate_Bulk)*(Vdso2-Vdss))+((Vdso2-Vdss)*(-Vdss_VGate_Bulk)))+((deltaV_VGate_Bulk*deltaV)+(deltaV*deltaV_VGate_Bulk)))*d10_sqrt1);
    1382                 :          0 : Vip_VDrain_int_Bulk=((((Vdss_VDrain_int_Bulk*Vdss)+(Vdss*Vdss_VDrain_int_Bulk))+((deltaV_VDrain_int_Bulk*deltaV)+(deltaV*deltaV_VDrain_int_Bulk)))*d10_sqrt0-((((Vdso2_VDrain_int_Bulk-Vdss_VDrain_int_Bulk)*(Vdso2-Vdss))+((Vdso2-Vdss)*(Vdso2_VDrain_int_Bulk-Vdss_VDrain_int_Bulk)))+((deltaV_VDrain_int_Bulk*deltaV)+(deltaV*deltaV_VDrain_int_Bulk)))*d10_sqrt1);
    1383                 :          0 : Vip_VSource_int_Bulk=((((Vdss_VSource_int_Bulk*Vdss)+(Vdss*Vdss_VSource_int_Bulk))+((deltaV_VSource_int_Bulk*deltaV)+(deltaV*deltaV_VSource_int_Bulk)))*d10_sqrt0-((((Vdso2_VSource_int_Bulk-Vdss_VSource_int_Bulk)*(Vdso2-Vdss))+((Vdso2-Vdss)*(Vdso2_VSource_int_Bulk-Vdss_VSource_int_Bulk)))+((deltaV_VSource_int_Bulk*deltaV)+(deltaV*deltaV_VSource_int_Bulk)))*d10_sqrt1);
    1384                 :            : #endif
    1385                 :          0 : Vip=(d00_sqrt0-d00_sqrt1);
    1386                 :            : }
    1387                 :            : {
    1388                 :          0 : double m00_logE(d00_logE0,(1.0+((Vdso2-Vip)*con19)))
    1389                 :            : #if defined(_DERIVATE)
    1390                 :          0 : double m10_logE(d10_logE0,d00_logE0,(1.0+((Vdso2-Vip)*con19)))
    1391                 :            : #endif
    1392                 :            : #if defined(_DERIVATE)
    1393                 :          0 : DeltaL_VSource_int_Bulk=(con18*(Vdso2_VSource_int_Bulk-Vip_VSource_int_Bulk)*con19*d10_logE0);
    1394                 :          0 : DeltaL_VDrain_int_Bulk=(con18*(Vdso2_VDrain_int_Bulk-Vip_VDrain_int_Bulk)*con19*d10_logE0);
    1395                 :          0 : DeltaL_VGate_Bulk=(con18*(-Vip_VGate_Bulk)*con19*d10_logE0);
    1396                 :            : #endif
    1397                 :          0 : DeltaL=(con18*d00_logE0);
    1398                 :            : }
    1399                 :            : #if defined(_DERIVATE)
    1400                 :          0 : Lprime_VSource_int_Bulk=((-DeltaL_VSource_int_Bulk)+((Vdso2_VSource_int_Bulk+Vip_VSource_int_Bulk)/Ucrit_T));
    1401                 :          0 : Lprime_VDrain_int_Bulk=((-DeltaL_VDrain_int_Bulk)+((Vdso2_VDrain_int_Bulk+Vip_VDrain_int_Bulk)/Ucrit_T));
    1402                 :          0 : Lprime_VGate_Bulk=((-DeltaL_VGate_Bulk)+(Vip_VGate_Bulk/Ucrit_T));
    1403                 :            : #endif
    1404                 :          0 : Lprime=((con20-DeltaL)+((Vdso2+Vip)/Ucrit_T));
    1405                 :            : {
    1406                 :          0 : double m00_sqrt(d00_sqrt0,((Lprime*Lprime)+(Lmin*Lmin)))
    1407                 :            : #if defined(_DERIVATE)
    1408                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((Lprime*Lprime)+(Lmin*Lmin)))
    1409                 :            : #endif
    1410                 :            : #if defined(_DERIVATE)
    1411                 :          0 : Leq_VSource_int_Bulk=(0.5*(Lprime_VSource_int_Bulk+((Lprime_VSource_int_Bulk*Lprime)+(Lprime*Lprime_VSource_int_Bulk))*d10_sqrt0));
    1412                 :          0 : Leq_VDrain_int_Bulk=(0.5*(Lprime_VDrain_int_Bulk+((Lprime_VDrain_int_Bulk*Lprime)+(Lprime*Lprime_VDrain_int_Bulk))*d10_sqrt0));
    1413                 :          0 : Leq_VGate_Bulk=(0.5*(Lprime_VGate_Bulk+((Lprime_VGate_Bulk*Lprime)+(Lprime*Lprime_VGate_Bulk))*d10_sqrt0));
    1414                 :            : #endif
    1415                 :          0 : Leq=(0.5*(Lprime+d00_sqrt0));
    1416                 :            : }
    1417                 :            : {
    1418                 :          0 : double m00_sqrt(d00_sqrt0,((Vdssprime*Vdssprime)+(deltaV*deltaV)))
    1419                 :          0 : double m00_sqrt(d00_sqrt1,(((Vdso2-Vdssprime)*(Vdso2-Vdssprime))+(deltaV*deltaV)))
    1420                 :            : #if defined(_DERIVATE)
    1421                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vdssprime*Vdssprime)+(deltaV*deltaV)))
    1422                 :          0 : double m10_sqrt(d10_sqrt1,d00_sqrt1,(((Vdso2-Vdssprime)*(Vdso2-Vdssprime))+(deltaV*deltaV)))
    1423                 :            : #endif
    1424                 :            : #if defined(_DERIVATE)
    1425                 :          0 : X3_VGate_Bulk=(((Vp_VGate_Bulk-(((Vdssprime_VGate_Bulk*Vdssprime)+(Vdssprime*Vdssprime_VGate_Bulk))+((deltaV_VGate_Bulk*deltaV)+(deltaV*deltaV_VGate_Bulk)))*d10_sqrt0)+((((-Vdssprime_VGate_Bulk)*(Vdso2-Vdssprime))+((Vdso2-Vdssprime)*(-Vdssprime_VGate_Bulk)))+((deltaV_VGate_Bulk*deltaV)+(deltaV*deltaV_VGate_Bulk)))*d10_sqrt1)/_vt_nom);
    1426                 :          0 : X3_VDrain_int_Bulk=(((((Vp_VDrain_int_Bulk-Vdso2_VDrain_int_Bulk)-VS_VDrain_int_Bulk)-(((Vdssprime_VDrain_int_Bulk*Vdssprime)+(Vdssprime*Vdssprime_VDrain_int_Bulk))+((deltaV_VDrain_int_Bulk*deltaV)+(deltaV*deltaV_VDrain_int_Bulk)))*d10_sqrt0)+((((Vdso2_VDrain_int_Bulk-Vdssprime_VDrain_int_Bulk)*(Vdso2-Vdssprime))+((Vdso2-Vdssprime)*(Vdso2_VDrain_int_Bulk-Vdssprime_VDrain_int_Bulk)))+((deltaV_VDrain_int_Bulk*deltaV)+(deltaV*deltaV_VDrain_int_Bulk)))*d10_sqrt1)/_vt_nom);
    1427                 :          0 : X3_VSource_int_Bulk=(((((Vp_VSource_int_Bulk-Vdso2_VSource_int_Bulk)-VS_VSource_int_Bulk)-(((Vdssprime_VSource_int_Bulk*Vdssprime)+(Vdssprime*Vdssprime_VSource_int_Bulk))+((deltaV_VSource_int_Bulk*deltaV)+(deltaV*deltaV_VSource_int_Bulk)))*d10_sqrt0)+((((Vdso2_VSource_int_Bulk-Vdssprime_VSource_int_Bulk)*(Vdso2-Vdssprime))+((Vdso2-Vdssprime)*(Vdso2_VSource_int_Bulk-Vdssprime_VSource_int_Bulk)))+((deltaV_VSource_int_Bulk*deltaV)+(deltaV*deltaV_VSource_int_Bulk)))*d10_sqrt1)/_vt_nom);
    1428                 :            : #endif
    1429                 :          0 : X3=(((((Vp-Vdso2)-VS)-d00_sqrt0)+d00_sqrt1)/_vt_nom);
    1430                 :            : }
    1431                 :            : {
    1432         [ #  # ]:          0 : double m00_limexp(d00_limexp0,(X3/2.0))
    1433                 :          0 : double m00_logE(d00_logE1,(1.0+d00_limexp0))
    1434                 :            : #if defined(_DERIVATE)
    1435         [ #  # ]:          0 : double m10_limexp(d10_limexp0,d00_limexp0,(X3/2.0))
    1436                 :          0 : double m10_logE(d10_logE1,d00_logE1,(1.0+d00_limexp0))
    1437                 :            : #endif
    1438                 :            : #if defined(_DERIVATE)
    1439                 :          0 : T_1_VGate_Bulk=(X3_VGate_Bulk/2.0)*d10_limexp0*d10_logE1;
    1440                 :          0 : T_1_VDrain_int_Bulk=(X3_VDrain_int_Bulk/2.0)*d10_limexp0*d10_logE1;
    1441                 :          0 : T_1_VSource_int_Bulk=(X3_VSource_int_Bulk/2.0)*d10_limexp0*d10_logE1;
    1442                 :            : #endif
    1443                 :          0 : T_1=d00_logE1;
    1444                 :            : }
    1445                 :            : #if defined(_DERIVATE)
    1446                 :          0 : irprime_VGate_Bulk=((T_1_VGate_Bulk*T_1)+(T_1*T_1_VGate_Bulk));
    1447                 :          0 : irprime_VDrain_int_Bulk=((T_1_VDrain_int_Bulk*T_1)+(T_1*T_1_VDrain_int_Bulk));
    1448                 :          0 : irprime_VSource_int_Bulk=((T_1_VSource_int_Bulk*T_1)+(T_1*T_1_VSource_int_Bulk));
    1449                 :            : #endif
    1450                 :          0 : irprime=(T_1*T_1);
    1451                 :            : #if defined(_DERIVATE)
    1452                 :          0 : Beta0_VSource_int_Bulk=(Kpa_T*(-(Np*Weff)*Leq_VSource_int_Bulk/Leq/Leq));
    1453                 :          0 : Beta0_VDrain_int_Bulk=(Kpa_T*(-(Np*Weff)*Leq_VDrain_int_Bulk/Leq/Leq));
    1454                 :          0 : Beta0_VGate_Bulk=(Kpa_T*(-(Np*Weff)*Leq_VGate_Bulk/Leq/Leq));
    1455                 :            : #endif
    1456                 :          0 : Beta0=(Kpa_T*((Np*Weff)/Leq));
    1457                 :            : #if defined(_DERIVATE)
    1458                 :          0 : Beta0prime_VSource_int_Bulk=Beta0_VSource_int_Bulk*con17;
    1459                 :          0 : Beta0prime_VDrain_int_Bulk=Beta0_VDrain_int_Bulk*con17;
    1460                 :          0 : Beta0prime_VGate_Bulk=Beta0_VGate_Bulk*con17;
    1461                 :            : #endif
    1462                 :          0 : Beta0prime=(Beta0*con17);
    1463                 :            : {
    1464                 :          0 : double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+1e-6))
    1465                 :            : #if defined(_DERIVATE)
    1466                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+1e-6))
    1467                 :            : #endif
    1468                 :            : #if defined(_DERIVATE)
    1469                 :          0 : nq_VGate_Bulk=(-Gammaa*(2.0*Vp_VGate_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1470                 :          0 : nq_VDrain_int_Bulk=(-Gammaa*(2.0*Vp_VDrain_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1471                 :          0 : nq_VSource_int_Bulk=(-Gammaa*(2.0*Vp_VSource_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1472                 :            : #endif
    1473                 :          0 : nq=(1.0+(Gammaa/(2.0*d00_sqrt0)));
    1474                 :            : }
    1475                 :            : }
    1476                 :            : else
    1477                 :            : {
    1478                 :            : {
    1479                 :          0 : double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+1e-6))
    1480                 :            : #if defined(_DERIVATE)
    1481                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+1e-6))
    1482                 :            : #endif
    1483                 :            : #if defined(_DERIVATE)
    1484                 :          0 : nq_VGate_Bulk=(-Gamma*(2.0*Vp_VGate_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1485                 :          0 : nq_VDrain_int_Bulk=(-Gamma*(2.0*Vp_VDrain_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1486                 :          0 : nq_VSource_int_Bulk=(-Gamma*(2.0*Vp_VSource_int_Bulk*d10_sqrt0)/(2.0*d00_sqrt0)/(2.0*d00_sqrt0));
    1487                 :            : #endif
    1488                 :          0 : nq=(1.0+(Gamma/(2.0*d00_sqrt0)));
    1489                 :            : }
    1490                 :            : }
    1491                 :            : {
    1492                 :          0 : double m00_sqrt(d00_sqrt0,(0.25+iff))
    1493                 :            : #if defined(_DERIVATE)
    1494                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,(0.25+iff))
    1495                 :            : #endif
    1496                 :            : #if defined(_DERIVATE)
    1497                 :          0 : Xf_VGate_Bulk=iff_VGate_Bulk*d10_sqrt0;
    1498                 :          0 : Xf_VDrain_int_Bulk=iff_VDrain_int_Bulk*d10_sqrt0;
    1499                 :          0 : Xf_VSource_int_Bulk=iff_VSource_int_Bulk*d10_sqrt0;
    1500                 :            : #endif
    1501                 :          0 : Xf=d00_sqrt0;
    1502                 :            : }
    1503                 :            : {
    1504                 :          0 : double m00_sqrt(d00_sqrt0,(0.25+ir))
    1505                 :            : #if defined(_DERIVATE)
    1506                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,(0.25+ir))
    1507                 :            : #endif
    1508                 :            : #if defined(_DERIVATE)
    1509                 :          0 : Xr_VGate_Bulk=ir_VGate_Bulk*d10_sqrt0;
    1510                 :          0 : Xr_VDrain_int_Bulk=ir_VDrain_int_Bulk*d10_sqrt0;
    1511                 :          0 : Xr_VSource_int_Bulk=ir_VSource_int_Bulk*d10_sqrt0;
    1512                 :            : #endif
    1513                 :          0 : Xr=d00_sqrt0;
    1514                 :            : }
    1515                 :            : #if defined(_DERIVATE)
    1516                 :          0 : qI_VGate_Bulk=(((-nq_VGate_Bulk)*(((con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))/(Xf+Xr))-1.0))+((-nq)*(((con30*((((Xf_VGate_Bulk*Xf)+(Xf*Xf_VGate_Bulk))+((Xf_VGate_Bulk*Xr)+(Xf*Xr_VGate_Bulk)))+((Xr_VGate_Bulk*Xr)+(Xr*Xr_VGate_Bulk))))*(Xf+Xr)-(con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))*(Xf_VGate_Bulk+Xr_VGate_Bulk))/(Xf+Xr)/(Xf+Xr))));
    1517                 :          0 : qI_VDrain_int_Bulk=(((-nq_VDrain_int_Bulk)*(((con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))/(Xf+Xr))-1.0))+((-nq)*(((con30*((((Xf_VDrain_int_Bulk*Xf)+(Xf*Xf_VDrain_int_Bulk))+((Xf_VDrain_int_Bulk*Xr)+(Xf*Xr_VDrain_int_Bulk)))+((Xr_VDrain_int_Bulk*Xr)+(Xr*Xr_VDrain_int_Bulk))))*(Xf+Xr)-(con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))*(Xf_VDrain_int_Bulk+Xr_VDrain_int_Bulk))/(Xf+Xr)/(Xf+Xr))));
    1518                 :          0 : qI_VSource_int_Bulk=(((-nq_VSource_int_Bulk)*(((con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))/(Xf+Xr))-1.0))+((-nq)*(((con30*((((Xf_VSource_int_Bulk*Xf)+(Xf*Xf_VSource_int_Bulk))+((Xf_VSource_int_Bulk*Xr)+(Xf*Xr_VSource_int_Bulk)))+((Xr_VSource_int_Bulk*Xr)+(Xr*Xr_VSource_int_Bulk))))*(Xf+Xr)-(con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))*(Xf_VSource_int_Bulk+Xr_VSource_int_Bulk))/(Xf+Xr)/(Xf+Xr))));
    1519                 :            : #endif
    1520                 :          0 : qI=((-nq)*(((con30*(((Xf*Xf)+(Xf*Xr))+(Xr*Xr)))/(Xf+Xr))-1.0));
    1521         [ #  # ]:          0 : if
    1522                 :            : (LEVEL==2)
    1523                 :            : {
    1524         [ #  # ]:          0 : if
    1525                 :            : (VGprime>0)
    1526                 :            : {
    1527                 :            : {
    1528                 :          0 : double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+1e-6))
    1529                 :            : #if defined(_DERIVATE)
    1530                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+1e-6))
    1531                 :            : #endif
    1532                 :            : #if defined(_DERIVATE)
    1533                 :          0 : qB_VGate_Bulk=((((-Gammaa)*Vp_VGate_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VGate_Bulk*(nq-1.0))+(qI*nq_VGate_Bulk))*nq-(qI*(nq-1.0))*nq_VGate_Bulk)/nq/nq));
    1534                 :          0 : qB_VDrain_int_Bulk=((((-Gammaa)*Vp_VDrain_int_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VDrain_int_Bulk*(nq-1.0))+(qI*nq_VDrain_int_Bulk))*nq-(qI*(nq-1.0))*nq_VDrain_int_Bulk)/nq/nq));
    1535                 :          0 : qB_VSource_int_Bulk=((((-Gammaa)*Vp_VSource_int_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VSource_int_Bulk*(nq-1.0))+(qI*nq_VSource_int_Bulk))*nq-(qI*(nq-1.0))*nq_VSource_int_Bulk)/nq/nq));
    1536                 :            : #endif
    1537                 :          0 : qB=((((-Gammaa)*d00_sqrt0)/_vt_nom)-((qI*(nq-1.0))/nq));
    1538                 :            : }
    1539                 :            : }
    1540                 :            : else
    1541                 :            : {
    1542                 :            : #if defined(_DERIVATE)
    1543                 :          0 : qB_VGate_Bulk=((-VGprime_VGate_Bulk)/_vt_nom);
    1544                 :          0 : qB_VDrain_int_Bulk=0.0;
    1545                 :          0 : qB_VSource_int_Bulk=0.0;
    1546                 :            : #endif
    1547                 :          0 : qB=((-VGprime)/_vt_nom);
    1548                 :            : }
    1549                 :            : }
    1550                 :            : else
    1551                 :            : {
    1552         [ #  # ]:          0 : if
    1553                 :            : (VGprime>0)
    1554                 :            : {
    1555                 :            : {
    1556                 :          0 : double m00_sqrt(d00_sqrt0,((Vp+Phi_T)+1e-6))
    1557                 :            : #if defined(_DERIVATE)
    1558                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((Vp+Phi_T)+1e-6))
    1559                 :            : #endif
    1560                 :            : #if defined(_DERIVATE)
    1561                 :          0 : qB_VGate_Bulk=((((-Gamma)*Vp_VGate_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VGate_Bulk*(nq-1.0))+(qI*nq_VGate_Bulk))*nq-(qI*(nq-1.0))*nq_VGate_Bulk)/nq/nq));
    1562                 :          0 : qB_VDrain_int_Bulk=((((-Gamma)*Vp_VDrain_int_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VDrain_int_Bulk*(nq-1.0))+(qI*nq_VDrain_int_Bulk))*nq-(qI*(nq-1.0))*nq_VDrain_int_Bulk)/nq/nq));
    1563                 :          0 : qB_VSource_int_Bulk=((((-Gamma)*Vp_VSource_int_Bulk*d10_sqrt0)/_vt_nom)-((((qI_VSource_int_Bulk*(nq-1.0))+(qI*nq_VSource_int_Bulk))*nq-(qI*(nq-1.0))*nq_VSource_int_Bulk)/nq/nq));
    1564                 :            : #endif
    1565                 :          0 : qB=((((-Gamma)*d00_sqrt0)/_vt_nom)-((qI*(nq-1.0))/nq));
    1566                 :            : }
    1567                 :            : }
    1568                 :            : else
    1569                 :            : {
    1570                 :            : #if defined(_DERIVATE)
    1571                 :          0 : qB_VGate_Bulk=((-VGprime_VGate_Bulk)/_vt_nom);
    1572                 :          0 : qB_VDrain_int_Bulk=0.0;
    1573                 :          0 : qB_VSource_int_Bulk=0.0;
    1574                 :            : #endif
    1575                 :          0 : qB=((-VGprime)/_vt_nom);
    1576                 :            : }
    1577                 :            : }
    1578         [ #  # ]:          0 : if
    1579                 :            : (LEVEL==2)
    1580                 :            : {
    1581                 :            : {
    1582         [ #  # ]:          0 : double m00_abs(d00_abs0,(qB+(eta*qI)))
    1583                 :            : #if defined(_DERIVATE)
    1584         [ #  # ]:          0 : double m10_abs(d10_abs0,d00_abs0,(qB+(eta*qI)))
    1585                 :            : #endif
    1586                 :            : #if defined(_DERIVATE)
    1587                 :          0 : Beta_VSource_int_Bulk=((Beta0prime_VSource_int_Bulk*(1.0+(con21*d00_abs0))-Beta0prime*(con21*(qB_VSource_int_Bulk+(eta*qI_VSource_int_Bulk))*d10_abs0))/(1.0+(con21*d00_abs0))/(1.0+(con21*d00_abs0)));
    1588                 :          0 : Beta_VDrain_int_Bulk=((Beta0prime_VDrain_int_Bulk*(1.0+(con21*d00_abs0))-Beta0prime*(con21*(qB_VDrain_int_Bulk+(eta*qI_VDrain_int_Bulk))*d10_abs0))/(1.0+(con21*d00_abs0))/(1.0+(con21*d00_abs0)));
    1589                 :          0 : Beta_VGate_Bulk=((Beta0prime_VGate_Bulk*(1.0+(con21*d00_abs0))-Beta0prime*(con21*(qB_VGate_Bulk+(eta*qI_VGate_Bulk))*d10_abs0))/(1.0+(con21*d00_abs0))/(1.0+(con21*d00_abs0)));
    1590                 :            : #endif
    1591                 :          0 : Beta=(Beta0prime/(1.0+(con21*d00_abs0)));
    1592                 :            : }
    1593                 :            : }
    1594                 :            : else
    1595                 :            : {
    1596                 :            : #if defined(_DERIVATE)
    1597                 :          0 : Beta_VSource_int_Bulk=(-con22*(Theta*Vp_VSource_int_Bulk)/(1+(Theta*Vp))/(1+(Theta*Vp)));
    1598                 :          0 : Beta_VDrain_int_Bulk=(-con22*(Theta*Vp_VDrain_int_Bulk)/(1+(Theta*Vp))/(1+(Theta*Vp)));
    1599                 :          0 : Beta_VGate_Bulk=(-con22*(Theta*Vp_VGate_Bulk)/(1+(Theta*Vp))/(1+(Theta*Vp)));
    1600                 :            : #endif
    1601                 :          0 : Beta=(con22/(1+(Theta*Vp)));
    1602                 :            : }
    1603                 :            : #if defined(_DERIVATE)
    1604                 :          0 : Ispecific_VGate_Bulk=(((2.0*n_VGate_Bulk)*Beta)+((2.0*n)*Beta_VGate_Bulk))*_vt_nom*_vt_nom;
    1605                 :          0 : Ispecific_VDrain_int_Bulk=(((2.0*n_VDrain_int_Bulk)*Beta)+((2.0*n)*Beta_VDrain_int_Bulk))*_vt_nom*_vt_nom;
    1606                 :          0 : Ispecific_VSource_int_Bulk=(((2.0*n_VSource_int_Bulk)*Beta)+((2.0*n)*Beta_VSource_int_Bulk))*_vt_nom*_vt_nom;
    1607                 :            : #endif
    1608                 :          0 : Ispecific=((((2.0*n)*Beta)*_vt_nom)*_vt_nom);
    1609         [ #  # ]:          0 : if
    1610                 :            : (LEVEL==2)
    1611                 :            : {
    1612                 :            : #if defined(_DERIVATE)
    1613                 :          0 : Ids_VGate_Bulk=((Ispecific_VGate_Bulk*(iff-irprime))+(Ispecific*(iff_VGate_Bulk-irprime_VGate_Bulk)));
    1614                 :          0 : Ids_VDrain_int_Bulk=((Ispecific_VDrain_int_Bulk*(iff-irprime))+(Ispecific*(iff_VDrain_int_Bulk-irprime_VDrain_int_Bulk)));
    1615                 :          0 : Ids_VSource_int_Bulk=((Ispecific_VSource_int_Bulk*(iff-irprime))+(Ispecific*(iff_VSource_int_Bulk-irprime_VSource_int_Bulk)));
    1616                 :            : #endif
    1617                 :          0 : Ids=(Ispecific*(iff-irprime));
    1618                 :            : #if defined(_DERIVATE)
    1619                 :          0 : Vib_VSource_int_Bulk=((VD_VSource_int_Bulk-VS_VSource_int_Bulk)-((Ibn*2.0)*Vdss_VSource_int_Bulk));
    1620                 :          0 : Vib_VDrain_int_Bulk=((VD_VDrain_int_Bulk-VS_VDrain_int_Bulk)-((Ibn*2.0)*Vdss_VDrain_int_Bulk));
    1621                 :          0 : Vib_VGate_Bulk=(-((Ibn*2.0)*Vdss_VGate_Bulk));
    1622                 :            : #endif
    1623                 :          0 : Vib=((VD-VS)-((Ibn*2.0)*Vdss));
    1624         [ #  # ]:          0 : if
    1625                 :            : (Vib>0.0)
    1626                 :            : {
    1627                 :            : {
    1628                 :          0 : double m00_exp(d00_exp0,(((-Ibb_T)*Lc)/Vib))
    1629                 :            : #if defined(_DERIVATE)
    1630                 :            : #define d10_exp0 d00_exp0
    1631                 :            : #endif
    1632                 :            : #if defined(_DERIVATE)
    1633                 :          0 : Idb_VGate_Bulk=((((Ids_VGate_Bulk*(Iba/Ibb_T)*Vib)+((Ids*(Iba/Ibb_T))*Vib_VGate_Bulk))*d00_exp0)+(((Ids*(Iba/Ibb_T))*Vib)*(-((-Ibb_T)*Lc)*Vib_VGate_Bulk/Vib/Vib)*d10_exp0));
    1634                 :          0 : Idb_VDrain_int_Bulk=((((Ids_VDrain_int_Bulk*(Iba/Ibb_T)*Vib)+((Ids*(Iba/Ibb_T))*Vib_VDrain_int_Bulk))*d00_exp0)+(((Ids*(Iba/Ibb_T))*Vib)*(-((-Ibb_T)*Lc)*Vib_VDrain_int_Bulk/Vib/Vib)*d10_exp0));
    1635                 :          0 : Idb_VSource_int_Bulk=((((Ids_VSource_int_Bulk*(Iba/Ibb_T)*Vib)+((Ids*(Iba/Ibb_T))*Vib_VSource_int_Bulk))*d00_exp0)+(((Ids*(Iba/Ibb_T))*Vib)*(-((-Ibb_T)*Lc)*Vib_VSource_int_Bulk/Vib/Vib)*d10_exp0));
    1636                 :            : #endif
    1637                 :          0 : Idb=(((Ids*(Iba/Ibb_T))*Vib)*d00_exp0);
    1638                 :            : }
    1639                 :            : }
    1640                 :            : else
    1641                 :            : {
    1642                 :            : #if defined(_DERIVATE)
    1643                 :          0 : Idb_VGate_Bulk=0.0;
    1644                 :          0 : Idb_VDrain_int_Bulk=0.0;
    1645                 :          0 : Idb_VSource_int_Bulk=0.0;
    1646                 :            : #endif
    1647                 :          0 : Idb=0.0;
    1648                 :            : }
    1649                 :            : }
    1650                 :            : else
    1651                 :            : {
    1652                 :            : #if defined(_DERIVATE)
    1653                 :          0 : Ids_VGate_Bulk=((Ispecific_VGate_Bulk*(iff-ir))+(Ispecific*(iff_VGate_Bulk-ir_VGate_Bulk)));
    1654                 :          0 : Ids_VDrain_int_Bulk=((Ispecific_VDrain_int_Bulk*(iff-ir))+(Ispecific*(iff_VDrain_int_Bulk-ir_VDrain_int_Bulk)));
    1655                 :          0 : Ids_VSource_int_Bulk=((Ispecific_VSource_int_Bulk*(iff-ir))+(Ispecific*(iff_VSource_int_Bulk-ir_VSource_int_Bulk)));
    1656                 :            : #endif
    1657                 :          0 : Ids=(Ispecific*(iff-ir));
    1658                 :            : }
    1659                 :            : {
    1660         [ #  # ]:          0 : double m00_abs(d00_abs0,qI)
    1661                 :            : #if defined(_DERIVATE)
    1662         [ #  # ]:          0 : double m10_abs(d10_abs0,d00_abs0,qI)
    1663                 :            : #endif
    1664                 :            : #if defined(_DERIVATE)
    1665                 :          0 : Sthermal_VSource_int_Bulk=(((fourkt*Beta_VSource_int_Bulk)*d00_abs0)+((fourkt*Beta)*qI_VSource_int_Bulk*d10_abs0));
    1666                 :          0 : Sthermal_VDrain_int_Bulk=(((fourkt*Beta_VDrain_int_Bulk)*d00_abs0)+((fourkt*Beta)*qI_VDrain_int_Bulk*d10_abs0));
    1667                 :          0 : Sthermal_VGate_Bulk=(((fourkt*Beta_VGate_Bulk)*d00_abs0)+((fourkt*Beta)*qI_VGate_Bulk*d10_abs0));
    1668                 :            : #endif
    1669                 :          0 : Sthermal=((fourkt*Beta)*d00_abs0);
    1670                 :            : }
    1671                 :            : #if defined(_DERIVATE)
    1672                 :          0 : T_1_VGate_Bulk=(-4.0*Ispecific_VGate_Bulk/Ispecific/Ispecific);
    1673                 :          0 : T_1_VDrain_int_Bulk=(-4.0*Ispecific_VDrain_int_Bulk/Ispecific/Ispecific);
    1674                 :          0 : T_1_VSource_int_Bulk=(-4.0*Ispecific_VSource_int_Bulk/Ispecific/Ispecific);
    1675                 :            : #endif
    1676                 :          0 : T_1=(4.0/Ispecific);
    1677                 :            : {
    1678                 :          0 : double m00_sqrt(d00_sqrt0,((T_1*iff)+1.0))
    1679                 :          0 : double m00_sqrt(d00_sqrt1,((T_1*ir)+1.0))
    1680                 :            : #if defined(_DERIVATE)
    1681                 :          0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((T_1*iff)+1.0))
    1682                 :          0 : double m10_sqrt(d10_sqrt1,d00_sqrt1,((T_1*ir)+1.0))
    1683                 :            : #endif
    1684                 :            : #if defined(_DERIVATE)
    1685                 :          0 : gm_VSource_int_Bulk=((Beta_VSource_int_Bulk*_vt_nom*(d00_sqrt0-d00_sqrt1))+((Beta*_vt_nom)*(((T_1_VSource_int_Bulk*iff)+(T_1*iff_VSource_int_Bulk))*d10_sqrt0-((T_1_VSource_int_Bulk*ir)+(T_1*ir_VSource_int_Bulk))*d10_sqrt1)));
    1686                 :          0 : gm_VDrain_int_Bulk=((Beta_VDrain_int_Bulk*_vt_nom*(d00_sqrt0-d00_sqrt1))+((Beta*_vt_nom)*(((T_1_VDrain_int_Bulk*iff)+(T_1*iff_VDrain_int_Bulk))*d10_sqrt0-((T_1_VDrain_int_Bulk*ir)+(T_1*ir_VDrain_int_Bulk))*d10_sqrt1)));
    1687                 :          0 : gm_VGate_Bulk=((Beta_VGate_Bulk*_vt_nom*(d00_sqrt0-d00_sqrt1))+((Beta*_vt_nom)*(((T_1_VGate_Bulk*iff)+(T_1*iff_VGate_Bulk))*d10_sqrt0-((T_1_VGate_Bulk*ir)+(T_1*ir_VGate_Bulk))*d10_sqrt1)));
    1688                 :            : #endif
    1689                 :          0 : gm=((Beta*_vt_nom)*(d00_sqrt0-d00_sqrt1));
    1690                 :            : }
    1691                 :            : #if defined(_DERIVATE)
    1692                 :          0 : Sflicker_VSource_int_Bulk=(((con23*gm_VSource_int_Bulk)*gm)+((con23*gm)*gm_VSource_int_Bulk));
    1693                 :          0 : Sflicker_VDrain_int_Bulk=(((con23*gm_VDrain_int_Bulk)*gm)+((con23*gm)*gm_VDrain_int_Bulk));
    1694                 :          0 : Sflicker_VGate_Bulk=(((con23*gm_VGate_Bulk)*gm)+((con23*gm)*gm_VGate_Bulk));
    1695                 :            : #endif
    1696                 :          0 : Sflicker=((con23*gm)*gm);
    1697                 :            : #if defined(_DYNAMIC)
    1698                 :            : #if defined(_DERIVATE)
    1699                 :          0 : qb_VGate_Bulk=(con24*qB_VGate_Bulk);
    1700                 :          0 : qb_VDrain_int_Bulk=(con24*qB_VDrain_int_Bulk);
    1701                 :          0 : qb_VSource_int_Bulk=(con24*qB_VSource_int_Bulk);
    1702                 :            : #endif
    1703                 :          0 : qb=(con24*qB);
    1704                 :            : #endif
    1705                 :            : #if defined(_DYNAMIC)
    1706                 :            : #if defined(_DERIVATE)
    1707                 :          0 : qg_VGate_Bulk=(con24*((-qI_VGate_Bulk)-qB_VGate_Bulk));
    1708                 :          0 : qg_VDrain_int_Bulk=(con24*((-qI_VDrain_int_Bulk)-qB_VDrain_int_Bulk));
    1709                 :          0 : qg_VSource_int_Bulk=(con24*((-qI_VSource_int_Bulk)-qB_VSource_int_Bulk));
    1710                 :            : #endif
    1711                 :          0 : qg=(con24*((-qI)-qB));
    1712                 :            : #endif
    1713                 :            : #if defined(_DYNAMIC)
    1714                 :            : #if defined(_DERIVATE)
    1715                 :          0 : qgso_VGate_Bulk=(con27*VG_VGate_Bulk);
    1716                 :          0 : qgso_VDrain_int_Bulk=(con27*(-VS_VDrain_int_Bulk));
    1717                 :          0 : qgso_VSource_int_Bulk=(con27*(-VS_VSource_int_Bulk));
    1718                 :            : #endif
    1719                 :          0 : qgso=(con27*(VG-VS));
    1720                 :            : #endif
    1721                 :            : #if defined(_DYNAMIC)
    1722                 :            : #if defined(_DERIVATE)
    1723                 :          0 : qgdo_VGate_Bulk=(con28*VG_VGate_Bulk);
    1724                 :          0 : qgdo_VSource_int_Bulk=(con28*(-VD_VSource_int_Bulk));
    1725                 :          0 : qgdo_VDrain_int_Bulk=(con28*(-VD_VDrain_int_Bulk));
    1726                 :            : #endif
    1727                 :          0 : qgdo=(con28*(VG-VD));
    1728                 :            : #endif
    1729                 :            : #if defined(_DYNAMIC)
    1730                 :            : #if defined(_DERIVATE)
    1731                 :          0 : qgbo_VGate_Bulk=(con29*VG_VGate_Bulk);
    1732                 :            : #endif
    1733                 :          0 : qgbo=(con29*VG);
    1734                 :            : #endif
    1735         [ #  # ]:          0 : if
    1736                 :            : (StoDswap>0.0)
    1737                 :            : {
    1738                 :            : #if defined(_DERIVATE)
    1739                 :          0 : V1_VBulk_Source_int=0.0;
    1740                 :          0 : V1_VBulk_Drain_int=(p_n_MOS);
    1741                 :            : #endif
    1742         [ #  # ]:          0 : V1=(p_n_MOS*BP(Bulk,Drain_int));
    1743                 :            : #if defined(_DERIVATE)
    1744                 :          0 : V2_VBulk_Drain_int=0.0;
    1745                 :          0 : V2_VBulk_Source_int=(p_n_MOS);
    1746                 :            : #endif
    1747         [ #  # ]:          0 : V2=(p_n_MOS*BP(Bulk,Source_int));
    1748                 :            : }
    1749                 :            : else
    1750                 :            : {
    1751                 :            : #if defined(_DERIVATE)
    1752                 :          0 : V2_VBulk_Drain_int=(p_n_MOS);
    1753                 :          0 : V2_VBulk_Source_int=0.0;
    1754                 :            : #endif
    1755         [ #  # ]:          0 : V2=(p_n_MOS*BP(Bulk,Drain_int));
    1756                 :            : #if defined(_DERIVATE)
    1757                 :          0 : V1_VBulk_Source_int=(p_n_MOS);
    1758                 :          0 : V1_VBulk_Drain_int=0.0;
    1759                 :            : #endif
    1760         [ #  # ]:          0 : V1=(p_n_MOS*BP(Bulk,Source_int));
    1761                 :            : }
    1762                 :            : {
    1763         [ #  # ]:          0 : double m00_limexp(d00_limexp0,(V1*con31))
    1764                 :            : #if defined(_DERIVATE)
    1765         [ #  # ]:          0 : double m10_limexp(d10_limexp0,d00_limexp0,(V1*con31))
    1766                 :            : #endif
    1767                 :            : #if defined(_DERIVATE)
    1768         [ #  # ]:          0 : Id1_VBulk_Source_int=((V1>(-con32))?((Area2*V1_VBulk_Source_int*con31*d10_limexp0)+(GMIN*V1_VBulk_Source_int)):0.0);
    1769         [ #  # ]:          0 : Id1_VBulk_Drain_int=((V1>(-con32))?((Area2*V1_VBulk_Drain_int*con31*d10_limexp0)+(GMIN*V1_VBulk_Drain_int)):0.0);
    1770                 :            : #endif
    1771         [ #  # ]:          0 : Id1=((V1>(-con32))?((Area2*(d00_limexp0-1.0))+(GMIN*V1)):0);
    1772                 :            : }
    1773                 :            : #if defined(_DYNAMIC)
    1774                 :            : {
    1775                 :          0 : double m00_pow(d00_pow0,(1-(V1/Vj_T2)),(1-M))
    1776                 :            : #if defined(_DERIVATE)
    1777         [ #  # ]:          0 : double m10_pow(d10_pow0,d00_pow0,(1-(V1/Vj_T2)),(1-M))
    1778                 :            : #endif
    1779                 :            : #if defined(_DERIVATE)
    1780         [ #  # ]:          0 : Qd1_VBulk_Source_int=((V1<con33)?((Tt*Id1_VBulk_Source_int)+(Area1*(-(d10_pow0*(-(V1_VBulk_Source_int/Vj_T2)))))):0.0);
    1781         [ #  # ]:          0 : Qd1_VBulk_Drain_int=((V1<con33)?((Tt*Id1_VBulk_Drain_int)+(Area1*(-(d10_pow0*(-(V1_VBulk_Drain_int/Vj_T2)))))):0.0);
    1782                 :            : #endif
    1783         [ #  # ]:          0 : Qd1=((V1<con33)?((Tt*Id1)+(Area1*(1-d00_pow0))):0);
    1784                 :            : }
    1785                 :            : #endif
    1786                 :            : #if defined(_DERIVATE)
    1787         [ #  # ]:          0 : Id2_VBulk_Source_int=((V1<=(-con32))?(GMIN*V1_VBulk_Source_int):0.0);
    1788         [ #  # ]:          0 : Id2_VBulk_Drain_int=((V1<=(-con32))?(GMIN*V1_VBulk_Drain_int):0.0);
    1789                 :            : #endif
    1790         [ #  # ]:          0 : Id2=((V1<=(-con32))?((-Area2)+(GMIN*V1)):0);
    1791                 :            : #if defined(_DYNAMIC)
    1792                 :            : #if defined(_DERIVATE)
    1793         [ #  # ]:          0 : Qd2_VBulk_Source_int=((V1>=con33)?((Tt*Id1_VBulk_Source_int)+(Area3*(DP4*((F3*V1_VBulk_Source_int)+(DP2*((V1_VBulk_Source_int*V1)+(V1*V1_VBulk_Source_int))))))):0.0);
    1794         [ #  # ]:          0 : Qd2_VBulk_Drain_int=((V1>=con33)?((Tt*Id1_VBulk_Drain_int)+(Area3*(DP4*((F3*V1_VBulk_Drain_int)+(DP2*((V1_VBulk_Drain_int*V1)+(V1*V1_VBulk_Drain_int))))))):0.0);
    1795                 :            : #endif
    1796         [ #  # ]:          0 : Qd2=((V1>=con33)?((Tt*Id1)+(Area3*(DP4*((F3*(V1-DP3))+(DP2*((V1*V1)-DP1)))))):0);
    1797                 :            : #endif
    1798                 :            : {
    1799         [ #  # ]:          0 : double m00_limexp(d00_limexp0,(V2*con31))
    1800                 :            : #if defined(_DERIVATE)
    1801         [ #  # ]:          0 : double m10_limexp(d10_limexp0,d00_limexp0,(V2*con31))
    1802                 :            : #endif
    1803                 :            : #if defined(_DERIVATE)
    1804         [ #  # ]:          0 : Is1_VBulk_Drain_int=((V2>(-con32))?((Area2*V2_VBulk_Drain_int*con31*d10_limexp0)+(GMIN*V2_VBulk_Drain_int)):0.0);
    1805         [ #  # ]:          0 : Is1_VBulk_Source_int=((V2>(-con32))?((Area2*V2_VBulk_Source_int*con31*d10_limexp0)+(GMIN*V2_VBulk_Source_int)):0.0);
    1806                 :            : #endif
    1807         [ #  # ]:          0 : Is1=((V2>(-con32))?((Area2*(d00_limexp0-1.0))+(GMIN*V2)):0);
    1808                 :            : }
    1809                 :            : #if defined(_DYNAMIC)
    1810                 :            : {
    1811                 :          0 : double m00_pow(d00_pow0,(1-(V2/Vj_T2)),(1-M))
    1812                 :            : #if defined(_DERIVATE)
    1813         [ #  # ]:          0 : double m10_pow(d10_pow0,d00_pow0,(1-(V2/Vj_T2)),(1-M))
    1814                 :            : #endif
    1815                 :            : #if defined(_DERIVATE)
    1816         [ #  # ]:          0 : Qs1_VBulk_Drain_int=((V2<con33)?((Tt*Is1_VBulk_Drain_int)+(Area1*(-(d10_pow0*(-(V2_VBulk_Drain_int/Vj_T2)))))):0.0);
    1817         [ #  # ]:          0 : Qs1_VBulk_Source_int=((V2<con33)?((Tt*Is1_VBulk_Source_int)+(Area1*(-(d10_pow0*(-(V2_VBulk_Source_int/Vj_T2)))))):0.0);
    1818                 :            : #endif
    1819         [ #  # ]:          0 : Qs1=((V2<con33)?((Tt*Is1)+(Area1*(1-d00_pow0))):0);
    1820                 :            : }
    1821                 :            : #endif
    1822                 :            : #if defined(_DERIVATE)
    1823         [ #  # ]:          0 : Is2_VBulk_Drain_int=((V2<=(-con32))?(GMIN*V2_VBulk_Drain_int):0.0);
    1824         [ #  # ]:          0 : Is2_VBulk_Source_int=((V2<=(-con32))?(GMIN*V2_VBulk_Source_int):0.0);
    1825                 :            : #endif
    1826         [ #  # ]:          0 : Is2=((V2<=(-con32))?((-Area2)+(GMIN*V2)):0);
    1827                 :            : #if defined(_DYNAMIC)
    1828                 :            : #if defined(_DERIVATE)
    1829         [ #  # ]:          0 : Qs2_VBulk_Drain_int=((V2>=con33)?((Tt*Is1_VBulk_Drain_int)+(Area3*(DP4*((F3*V2_VBulk_Drain_int)+(DP2*((V2_VBulk_Drain_int*V2)+(V2*V2_VBulk_Drain_int))))))):0.0);
    1830         [ #  # ]:          0 : Qs2_VBulk_Source_int=((V2>=con33)?((Tt*Is1_VBulk_Source_int)+(Area3*(DP4*((F3*V2_VBulk_Source_int)+(DP2*((V2_VBulk_Source_int*V2)+(V2*V2_VBulk_Source_int))))))):0.0);
    1831                 :            : #endif
    1832         [ #  # ]:          0 : Qs2=((V2>=con33)?((Tt*Is1)+(Area3*(DP4*((F3*(V2-DP3))+(DP2*((V2*V2)-DP1)))))):0);
    1833                 :            : #endif
    1834         [ #  # ]:          0 : if
    1835                 :            : (StoDswap>0.0)
    1836                 :            : {
    1837 [ #  # ][ #  # ]:          0 : _load_static_residual2(Drain,Drain_int,(BP(Drain,Drain_int)/RDeff));
    1838                 :            : #if defined(_DERIVATE)
    1839 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Drain,Drain_int,Drain,Drain_int,(1/RDeff));
         [ #  # ][ #  # ]
                 [ #  # ]
    1840                 :            : #endif
    1841 [ #  # ][ #  # ]:          0 : _load_static_residual2(Source,Source_int,(BP(Source,Source_int)/RSeff));
    1842                 :            : #if defined(_DERIVATE)
    1843 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Source,Source_int,Source,Source_int,(1/RSeff));
         [ #  # ][ #  # ]
                 [ #  # ]
    1844                 :            : #endif
    1845                 :          0 : _load_static_residual2(Drain_int,Source_int,(p_n_MOS*Ids));
    1846                 :            : #if defined(_DERIVATE)
    1847 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Drain_int,Source_int,Source_int,Bulk,(p_n_MOS*Ids_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1848 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Drain_int,Source_int,Drain_int,Bulk,(p_n_MOS*Ids_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1849 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Drain_int,Source_int,Gate,Bulk,(p_n_MOS*Ids_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1850                 :            : #endif
    1851         [ #  # ]:          0 : if
    1852                 :            : (LEVEL==2)
    1853                 :            : {
    1854                 :          0 : _load_static_residual2(Drain_int,Bulk,(p_n_MOS*Idb));
    1855                 :            : #if defined(_DERIVATE)
    1856 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Drain_int,Bulk,Source_int,Bulk,(p_n_MOS*Idb_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1857 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Drain_int,Bulk,Drain_int,Bulk,(p_n_MOS*Idb_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1858 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Drain_int,Bulk,Gate,Bulk,(p_n_MOS*Idb_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1859                 :            : #endif
    1860                 :            : }
    1861                 :            : #if defined(_DYNAMIC)
    1862 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Gate,Drain_int,((p_n_MOS*Xpart)*_DDT(qg)));
    1863                 :            : #if defined(_DERIVATE)
    1864 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Source_int,Bulk,((p_n_MOS*Xpart)*qg_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1865 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Drain_int,Bulk,((p_n_MOS*Xpart)*qg_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1866 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Gate,Bulk,((p_n_MOS*Xpart)*qg_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1867                 :            : #endif
    1868                 :            : #endif
    1869                 :            : #if defined(_DYNAMIC)
    1870 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Gate,Source_int,((p_n_MOS*Spart)*_DDT(qg)));
    1871                 :            : #if defined(_DERIVATE)
    1872 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Source_int,Bulk,((p_n_MOS*Spart)*qg_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1873 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Drain_int,Bulk,((p_n_MOS*Spart)*qg_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1874 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Gate,Bulk,((p_n_MOS*Spart)*qg_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1875                 :            : #endif
    1876                 :            : #endif
    1877                 :            : #if defined(_DYNAMIC)
    1878 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Drain_int,Bulk,((p_n_MOS*Xpart)*_DDT(qb)));
    1879                 :            : #if defined(_DERIVATE)
    1880 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Drain_int,Bulk,Source_int,Bulk,((p_n_MOS*Xpart)*qb_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1881 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Drain_int,Bulk,Drain_int,Bulk,((p_n_MOS*Xpart)*qb_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1882 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Drain_int,Bulk,Gate,Bulk,((p_n_MOS*Xpart)*qb_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1883                 :            : #endif
    1884                 :            : #endif
    1885                 :            : #if defined(_DYNAMIC)
    1886 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Source_int,Bulk,((p_n_MOS*Spart)*_DDT(qb)));
    1887                 :            : #if defined(_DERIVATE)
    1888 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Source_int,Bulk,Source_int,Bulk,((p_n_MOS*Spart)*qb_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1889 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Source_int,Bulk,Drain_int,Bulk,((p_n_MOS*Spart)*qb_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1890 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Source_int,Bulk,Gate,Bulk,((p_n_MOS*Spart)*qb_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1891                 :            : #endif
    1892                 :            : #endif
    1893                 :            : #if defined(_DYNAMIC)
    1894 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Gate,Source_int,(p_n_MOS*_DDT(qgso)));
    1895                 :            : #if defined(_DERIVATE)
    1896 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Source_int,Bulk,(p_n_MOS*qgso_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1897 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Drain_int,Bulk,(p_n_MOS*qgso_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1898 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Gate,Bulk,(p_n_MOS*qgso_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1899                 :            : #endif
    1900                 :            : #endif
    1901                 :            : #if defined(_DYNAMIC)
    1902 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Gate,Drain_int,(p_n_MOS*_DDT(qgdo)));
    1903                 :            : #if defined(_DERIVATE)
    1904 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Drain_int,Bulk,(p_n_MOS*qgdo_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1905 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Source_int,Bulk,(p_n_MOS*qgdo_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1906 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Gate,Bulk,(p_n_MOS*qgdo_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1907                 :            : #endif
    1908                 :            : #endif
    1909                 :            : #if defined(_DYNAMIC)
    1910 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Gate,Bulk,(p_n_MOS*_DDT(qgbo)));
    1911                 :            : #if defined(_DERIVATE)
    1912 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Bulk,Gate,Bulk,(p_n_MOS*qgbo_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1913                 :            : #endif
    1914                 :            : #endif
    1915                 :          0 : _load_static_residual2(Bulk,Drain_int,(p_n_MOS*(Id1+Id2)));
    1916                 :            : #if defined(_DERIVATE)
    1917 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Bulk,Drain_int,Bulk,Drain_int,(p_n_MOS*(Id1_VBulk_Drain_int+Id2_VBulk_Drain_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    1918 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Bulk,Drain_int,Bulk,Source_int,(p_n_MOS*(Id1_VBulk_Source_int+Id2_VBulk_Source_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    1919                 :            : #endif
    1920                 :            : #if defined(_DYNAMIC)
    1921 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Bulk,Drain_int,(p_n_MOS*_DDT((Qd1+Qd2))));
    1922                 :            : #if defined(_DERIVATE)
    1923 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Bulk,Drain_int,Bulk,Drain_int,(p_n_MOS*(Qd1_VBulk_Drain_int+Qd2_VBulk_Drain_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    1924 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Bulk,Drain_int,Bulk,Source_int,(p_n_MOS*(Qd1_VBulk_Source_int+Qd2_VBulk_Source_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    1925                 :            : #endif
    1926                 :            : #endif
    1927                 :          0 : _load_static_residual2(Bulk,Source_int,(p_n_MOS*(Is1+Is2)));
    1928                 :            : #if defined(_DERIVATE)
    1929 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Bulk,Source_int,Bulk,Source_int,(p_n_MOS*(Is1_VBulk_Source_int+Is2_VBulk_Source_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    1930 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Bulk,Source_int,Bulk,Drain_int,(p_n_MOS*(Is1_VBulk_Drain_int+Is2_VBulk_Drain_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    1931                 :            : #endif
    1932                 :            : #if defined(_DYNAMIC)
    1933 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Bulk,Source_int,(p_n_MOS*_DDT((Qs1+Qs2))));
    1934                 :            : #if defined(_DERIVATE)
    1935 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Bulk,Source_int,Bulk,Source_int,(p_n_MOS*(Qs1_VBulk_Source_int+Qs2_VBulk_Source_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    1936 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Bulk,Source_int,Bulk,Drain_int,(p_n_MOS*(Qs1_VBulk_Drain_int+Qs2_VBulk_Drain_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    1937                 :            : #endif
    1938                 :            : #endif
    1939                 :          0 : _save_whitenoise2(Drain_int,Source_int,Sthermal,"thermal");
    1940                 :          0 : _save_flickernoise2(Drain_int,Source_int,Sflicker,Af,"flicker");
    1941                 :          0 : _save_whitenoise2(Drain,Drain_int,con25,"thermal");
    1942                 :          0 : _save_whitenoise2(Source,Source_int,con26,"thermal");
    1943                 :            : }
    1944                 :            : else
    1945                 :            : {
    1946 [ #  # ][ #  # ]:          0 : _load_static_residual2(Drain,Drain_int,(BP(Drain,Drain_int)/RSeff));
    1947                 :            : #if defined(_DERIVATE)
    1948 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Drain,Drain_int,Drain,Drain_int,(1/RSeff));
         [ #  # ][ #  # ]
                 [ #  # ]
    1949                 :            : #endif
    1950 [ #  # ][ #  # ]:          0 : _load_static_residual2(Source,Source_int,(BP(Source,Source_int)/RDeff));
    1951                 :            : #if defined(_DERIVATE)
    1952 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Source,Source_int,Source,Source_int,(1/RDeff));
         [ #  # ][ #  # ]
                 [ #  # ]
    1953                 :            : #endif
    1954                 :          0 : _load_static_residual2(Source_int,Drain_int,(p_n_MOS*Ids));
    1955                 :            : #if defined(_DERIVATE)
    1956 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Source_int,Drain_int,Source_int,Bulk,(p_n_MOS*Ids_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1957 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Source_int,Drain_int,Drain_int,Bulk,(p_n_MOS*Ids_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1958 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Source_int,Drain_int,Gate,Bulk,(p_n_MOS*Ids_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1959                 :            : #endif
    1960         [ #  # ]:          0 : if
    1961                 :            : (LEVEL==2)
    1962                 :            : {
    1963                 :          0 : _load_static_residual2(Source_int,Bulk,(p_n_MOS*Idb));
    1964                 :            : #if defined(_DERIVATE)
    1965 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Source_int,Bulk,Source_int,Bulk,(p_n_MOS*Idb_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1966 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Source_int,Bulk,Drain_int,Bulk,(p_n_MOS*Idb_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1967 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Source_int,Bulk,Gate,Bulk,(p_n_MOS*Idb_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1968                 :            : #endif
    1969                 :            : }
    1970                 :            : #if defined(_DYNAMIC)
    1971 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Gate,Source_int,((p_n_MOS*Xpart)*_DDT(qg)));
    1972                 :            : #if defined(_DERIVATE)
    1973 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Source_int,Bulk,((p_n_MOS*Xpart)*qg_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1974 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Drain_int,Bulk,((p_n_MOS*Xpart)*qg_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1975 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Gate,Bulk,((p_n_MOS*Xpart)*qg_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1976                 :            : #endif
    1977                 :            : #endif
    1978                 :            : #if defined(_DYNAMIC)
    1979 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Gate,Drain_int,((p_n_MOS*Spart)*_DDT(qg)));
    1980                 :            : #if defined(_DERIVATE)
    1981 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Source_int,Bulk,((p_n_MOS*Spart)*qg_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1982 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Drain_int,Bulk,((p_n_MOS*Spart)*qg_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1983 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Gate,Bulk,((p_n_MOS*Spart)*qg_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1984                 :            : #endif
    1985                 :            : #endif
    1986                 :            : #if defined(_DYNAMIC)
    1987 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Source_int,Bulk,((p_n_MOS*Xpart)*_DDT(qb)));
    1988                 :            : #if defined(_DERIVATE)
    1989 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Source_int,Bulk,Source_int,Bulk,((p_n_MOS*Xpart)*qb_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1990 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Source_int,Bulk,Drain_int,Bulk,((p_n_MOS*Xpart)*qb_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1991 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Source_int,Bulk,Gate,Bulk,((p_n_MOS*Xpart)*qb_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1992                 :            : #endif
    1993                 :            : #endif
    1994                 :            : #if defined(_DYNAMIC)
    1995 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Drain_int,Bulk,((p_n_MOS*Spart)*_DDT(qb)));
    1996                 :            : #if defined(_DERIVATE)
    1997 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Drain_int,Bulk,Source_int,Bulk,((p_n_MOS*Spart)*qb_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1998 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Drain_int,Bulk,Drain_int,Bulk,((p_n_MOS*Spart)*qb_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    1999 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Drain_int,Bulk,Gate,Bulk,((p_n_MOS*Spart)*qb_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    2000                 :            : #endif
    2001                 :            : #endif
    2002                 :            : #if defined(_DYNAMIC)
    2003 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Gate,Drain_int,(p_n_MOS*_DDT(qgso)));
    2004                 :            : #if defined(_DERIVATE)
    2005 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Source_int,Bulk,(p_n_MOS*qgso_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    2006 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Drain_int,Bulk,(p_n_MOS*qgso_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    2007 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Drain_int,Gate,Bulk,(p_n_MOS*qgso_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    2008                 :            : #endif
    2009                 :            : #endif
    2010                 :            : #if defined(_DYNAMIC)
    2011 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Gate,Source_int,(p_n_MOS*_DDT(qgdo)));
    2012                 :            : #if defined(_DERIVATE)
    2013 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Drain_int,Bulk,(p_n_MOS*qgdo_VDrain_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    2014 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Source_int,Bulk,(p_n_MOS*qgdo_VSource_int_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    2015 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Source_int,Gate,Bulk,(p_n_MOS*qgdo_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    2016                 :            : #endif
    2017                 :            : #endif
    2018                 :            : #if defined(_DYNAMIC)
    2019 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Gate,Bulk,(p_n_MOS*_DDT(qgbo)));
    2020                 :            : #if defined(_DERIVATE)
    2021 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Gate,Bulk,Gate,Bulk,(p_n_MOS*qgbo_VGate_Bulk));
         [ #  # ][ #  # ]
                 [ #  # ]
    2022                 :            : #endif
    2023                 :            : #endif
    2024                 :          0 : _load_static_residual2(Bulk,Source_int,(p_n_MOS*(Id1+Id2)));
    2025                 :            : #if defined(_DERIVATE)
    2026 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Bulk,Source_int,Bulk,Drain_int,(p_n_MOS*(Id1_VBulk_Drain_int+Id2_VBulk_Drain_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    2027 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Bulk,Source_int,Bulk,Source_int,(p_n_MOS*(Id1_VBulk_Source_int+Id2_VBulk_Source_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    2028                 :            : #endif
    2029                 :            : #if defined(_DYNAMIC)
    2030 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Bulk,Source_int,(p_n_MOS*_DDT((Qd1+Qd2))));
    2031                 :            : #if defined(_DERIVATE)
    2032 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Bulk,Source_int,Bulk,Drain_int,(p_n_MOS*(Qd1_VBulk_Drain_int+Qd2_VBulk_Drain_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    2033 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Bulk,Source_int,Bulk,Source_int,(p_n_MOS*(Qd1_VBulk_Source_int+Qd2_VBulk_Source_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    2034                 :            : #endif
    2035                 :            : #endif
    2036                 :          0 : _load_static_residual2(Bulk,Drain_int,(p_n_MOS*(Is1+Is2)));
    2037                 :            : #if defined(_DERIVATE)
    2038 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Bulk,Drain_int,Bulk,Source_int,(p_n_MOS*(Is1_VBulk_Source_int+Is2_VBulk_Source_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    2039 [ #  # ][ #  # ]:          0 : _load_static_jacobian4(Bulk,Drain_int,Bulk,Drain_int,(p_n_MOS*(Is1_VBulk_Drain_int+Is2_VBulk_Drain_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    2040                 :            : #endif
    2041                 :            : #if defined(_DYNAMIC)
    2042 [ #  # ][ #  # ]:          0 : _load_dynamic_residual2(Bulk,Drain_int,(p_n_MOS*_DDT((Qs1+Qs2))));
    2043                 :            : #if defined(_DERIVATE)
    2044 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Bulk,Drain_int,Bulk,Source_int,(p_n_MOS*(Qs1_VBulk_Source_int+Qs2_VBulk_Source_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    2045 [ #  # ][ #  # ]:          0 : _load_dynamic_jacobian4(Bulk,Drain_int,Bulk,Drain_int,(p_n_MOS*(Qs1_VBulk_Drain_int+Qs2_VBulk_Drain_int)));
         [ #  # ][ #  # ]
                 [ #  # ]
    2046                 :            : #endif
    2047                 :            : #endif
    2048                 :          0 : _save_whitenoise2(Source_int,Drain_int,Sthermal,"thermal");
    2049                 :          0 : _save_flickernoise2(Source_int,Drain_int,Sflicker,Af,"flicker");
    2050                 :          0 : _save_whitenoise2(Source_int,Source,con25,"thermal");
    2051                 :          0 : _save_whitenoise2(Drain_int,Drain,con26,"thermal");
    2052                 :            : }
    2053                 :            : 
    2054                 :            : /* ------------------ end of verilog analog equations --------------------- */
    2055                 :            : 
    2056                 :            : /* ------------------ evaluate verilog noise equations -------------------- */
    2057                 :            : 
    2058                 :            : /* ------------------- end of verilog noise equations --------------------- */
    2059                 :          0 : }
    2060                 :            : 
    2061                 :            : /* Perform DC iteration. */
    2062                 :          0 : void EKV26MOS::calcDC (void)
    2063                 :            : {
    2064                 :            :   // evaluate Verilog code
    2065                 :          0 :   initVerilog ();
    2066                 :          0 :   calcVerilog ();
    2067                 :            : 
    2068                 :            :   // fill right hand side and static jacobian
    2069         [ #  # ]:          0 :   for (int i1 = 0; i1 < 6; i1++) {
    2070         [ #  # ]:          0 :     setI (i1, _rhs[i1]);
    2071         [ #  # ]:          0 :     for (int i2 = 0; i2 < 6; i2++) {
    2072         [ #  # ]:          0 :       setY (i1, i2, _jstat[i1][i2]);
    2073                 :            :     }
    2074                 :            :   }
    2075                 :          0 : }
    2076                 :            : 
    2077                 :            : /* Save operating points. */
    2078                 :          0 : void EKV26MOS::saveOperatingPoints (void)
    2079                 :            : {
    2080                 :            :   // save global instance operating points
    2081                 :          0 : }
    2082                 :            : 
    2083                 :            : /* Load operating points. */
    2084                 :          0 : void EKV26MOS::loadOperatingPoints (void)
    2085                 :            : {
    2086                 :          0 : }
    2087                 :            : 
    2088                 :            : /* Calculate operating points. */
    2089                 :          0 : void EKV26MOS::calcOperatingPoints (void)
    2090                 :            : {
    2091                 :          0 : }
    2092                 :            : 
    2093                 :            : /* Initialization of AC analysis. */
    2094                 :          0 : void EKV26MOS::initAC (void)
    2095                 :            : {
    2096                 :          0 :   allocMatrixMNA ();
    2097                 :          0 : }
    2098                 :            : 
    2099                 :            : /* Perform AC calculations. */
    2100                 :          0 : void EKV26MOS::calcAC (nr_double_t frequency)
    2101                 :            : {
    2102         [ #  # ]:          0 :   setMatrixY (calcMatrixY (frequency));
    2103                 :          0 : }
    2104                 :            : 
    2105                 :            : /* Compute Y-matrix for AC analysis. */
    2106                 :          0 : matrix EKV26MOS::calcMatrixY (nr_double_t frequency)
    2107                 :            : {
    2108                 :          0 :   _freq = frequency;
    2109                 :          0 :   saveOperatingPoints ();
    2110                 :          0 :   matrix y (6);
    2111                 :            : 
    2112         [ #  # ]:          0 :   for (int i1 = 0; i1 < 6; i1++) {
    2113         [ #  # ]:          0 :     for (int i2 = 0; i2 < 6; i2++) {
    2114                 :          0 :       y (i1,i2) = nr_complex_t (_jstat[i1][i2], _jdyna[i1][i2] * 2 * M_PI * _freq);
    2115                 :            :     }
    2116                 :            :   }
    2117                 :            : 
    2118                 :          0 :   return y;
    2119                 :            : }
    2120                 :            : 
    2121                 :            : /* Initialization of S-parameter analysis. */
    2122                 :          0 : void EKV26MOS::initSP (void)
    2123                 :            : {
    2124                 :          0 :   allocMatrixS ();
    2125                 :          0 : }
    2126                 :            : 
    2127                 :            : /* Perform S-parameter calculations. */
    2128                 :          0 : void EKV26MOS::calcSP (nr_double_t frequency)
    2129                 :            : {
    2130 [ #  # ][ #  # ]:          0 :   setMatrixS (ytos (calcMatrixY (frequency)));
         [ #  # ][ #  # ]
                 [ #  # ]
    2131                 :          0 : }
    2132                 :            : 
    2133                 :            : /* Initialization of transient analysis. */
    2134                 :          0 : void EKV26MOS::initTR (void)
    2135                 :            : {
    2136                 :          0 :   setStates (2 * 6 * 6);
    2137                 :          0 :   initDC ();
    2138                 :          0 : }
    2139                 :            : 
    2140                 :            : /* Perform transient analysis iteration step. */
    2141                 :          0 : void EKV26MOS::calcTR (nr_double_t)
    2142                 :            : {
    2143                 :          0 :   doHB = 0;
    2144                 :          0 :   doAC = 1;
    2145                 :          0 :   doTR = 1;
    2146                 :          0 :   calcDC ();
    2147                 :            : 
    2148                 :            :   int i1, i2, i3, i4, state;
    2149                 :            : 
    2150                 :            :   // 2-node charge integrations
    2151         [ #  # ]:          0 :   for (i1 = 0; i1 < 6; i1++) {
    2152         [ #  # ]:          0 :   for (i2 = 0; i2 < 6; i2++) {
    2153                 :          0 :     state = 2 * (i2 + 6 * i1);
    2154         [ #  # ]:          0 :     if (i1 != i2)
    2155         [ #  # ]:          0 :     if (_charges[i1][i2] != 0.0)
    2156                 :          0 :       transientCapacitanceQ (state, i1, i2, _charges[i1][i2]);
    2157                 :            :   } }
    2158                 :            : 
    2159                 :            :   // 1-node charge integrations
    2160         [ #  # ]:          0 :   for (i1 = 0; i1 < 6; i1++) {
    2161                 :          0 :     state = 2 * (i1 + 6 * i1);
    2162         [ #  # ]:          0 :     if (_charges[i1][i1] != 0.0)
    2163                 :          0 :       transientCapacitanceQ (state, i1, _charges[i1][i1]);
    2164                 :            :   }
    2165                 :            : 
    2166                 :            :   // charge: 2-node, voltage: 2-node
    2167         [ #  # ]:          0 :   for (i1 = 0; i1 < 6; i1++) {
    2168         [ #  # ]:          0 :   for (i2 = 0; i2 < 6; i2++) {
    2169         [ #  # ]:          0 :   if (i1 != i2)
    2170         [ #  # ]:          0 :   for (i3 = 0; i3 < 6; i3++) {
    2171         [ #  # ]:          0 :   for (i4 = 0; i4 < 6; i4++) {
    2172         [ #  # ]:          0 :     if (i3 != i4)
    2173         [ #  # ]:          0 :     if (_caps[i1][i2][i3][i4] != 0.0)
    2174 [ #  # ][ #  # ]:          0 :       transientCapacitanceC (i1, i2, i3, i4, _caps[i1][i2][i3][i4], BP(i3,i4));
    2175                 :            :   } } } }
    2176                 :            : 
    2177                 :            :   // charge: 2-node, voltage: 1-node
    2178         [ #  # ]:          0 :   for (i1 = 0; i1 < 6; i1++) {
    2179         [ #  # ]:          0 :   for (i2 = 0; i2 < 6; i2++) {
    2180         [ #  # ]:          0 :   if (i1 != i2)
    2181         [ #  # ]:          0 :   for (i3 = 0; i3 < 6; i3++) {
    2182         [ #  # ]:          0 :     if (_caps[i1][i2][i3][i3] != 0.0)
    2183         [ #  # ]:          0 :       transientCapacitanceC2Q (i1, i2, i3, _caps[i1][i2][i3][i3], NP(i3));
    2184                 :            :   } } }
    2185                 :            : 
    2186                 :            :   // charge: 1-node, voltage: 2-node
    2187         [ #  # ]:          0 :   for (i1 = 0; i1 < 6; i1++) {
    2188         [ #  # ]:          0 :   for (i3 = 0; i3 < 6; i3++) {
    2189         [ #  # ]:          0 :   for (i4 = 0; i4 < 6; i4++) {
    2190         [ #  # ]:          0 :     if (i3 != i4)
    2191         [ #  # ]:          0 :     if (_caps[i1][i1][i3][i4] != 0.0)
    2192 [ #  # ][ #  # ]:          0 :       transientCapacitanceC2V (i1, i3, i4, _caps[i1][i1][i3][i4], BP(i3,i4));
    2193                 :            :   } } }
    2194                 :            : 
    2195                 :            :   // charge: 1-node, voltage: 1-node
    2196         [ #  # ]:          0 :   for (i1 = 0; i1 < 6; i1++) {
    2197         [ #  # ]:          0 :   for (i3 = 0; i3 < 6; i3++) {
    2198         [ #  # ]:          0 :     if (_caps[i1][i1][i3][i3] != 0.0)
    2199         [ #  # ]:          0 :       transientCapacitanceC (i1, i3, _caps[i1][i1][i3][i3], NP(i3));
    2200                 :            :   } }
    2201                 :          0 : }
    2202                 :            : 
    2203                 :            : /* Compute Cy-matrix for AC noise analysis. */
    2204                 :          0 : matrix EKV26MOS::calcMatrixCy (nr_double_t frequency) 
    2205                 :            : {
    2206                 :          0 :   _freq = frequency;
    2207                 :          0 :   matrix cy (6);
    2208                 :            : 
    2209                 :          0 :   _load_flickernoise2 (Source_int,Drain_int,_flicker_pwr[Source_int][Drain_int],_flicker_exp[Source_int][Drain_int]);
    2210                 :          0 :   _load_flickernoise2 (Drain_int,Source_int,_flicker_pwr[Drain_int][Source_int],_flicker_exp[Drain_int][Source_int]);
    2211                 :          0 :   _load_whitenoise2 (Drain_int,Drain,_white_pwr[Drain_int][Drain]);
    2212                 :          0 :   _load_whitenoise2 (Source_int,Source,_white_pwr[Source_int][Source]);
    2213                 :          0 :   _load_whitenoise2 (Source_int,Drain_int,_white_pwr[Source_int][Drain_int]);
    2214                 :          0 :   _load_whitenoise2 (Drain_int,Source_int,_white_pwr[Drain_int][Source_int]);
    2215                 :          0 :   _load_whitenoise2 (Source,Source_int,_white_pwr[Source][Source_int]);
    2216                 :          0 :   _load_whitenoise2 (Drain,Drain_int,_white_pwr[Drain][Drain_int]);
    2217                 :            : 
    2218                 :          0 :   return cy;
    2219                 :            : }
    2220                 :            : 
    2221                 :            : /* Perform AC noise computations. */
    2222                 :          0 : void EKV26MOS::calcNoiseAC (nr_double_t frequency) 
    2223                 :            : {
    2224         [ #  # ]:          0 :   setMatrixN (calcMatrixCy (frequency));
    2225                 :          0 : }
    2226                 :            : 
    2227                 :            : /* Perform S-parameter noise computations. */
    2228                 :          0 : void EKV26MOS::calcNoiseSP (nr_double_t frequency) 
    2229                 :            : {
    2230 [ #  # ][ #  # ]:          0 :   setMatrixN (cytocs (calcMatrixCy (frequency) * z0, getMatrixS ()));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
    2231                 :          0 : }
    2232                 :            : 
    2233                 :            : /* Initialization of HB analysis. */
    2234                 :          0 : void EKV26MOS::initHB (int)
    2235                 :            : {
    2236                 :          0 :   initDC ();
    2237                 :          0 :   allocMatrixHB ();
    2238                 :          0 : }
    2239                 :            : 
    2240                 :            : /* Perform HB analysis. */
    2241                 :          0 : void EKV26MOS::calcHB (int)
    2242                 :            : {
    2243                 :          0 :   doHB = 1;
    2244                 :          0 :   doAC = 1;
    2245                 :          0 :   doTR = 0;
    2246                 :            : 
    2247                 :            :   // jacobian dI/dV and currents get filled
    2248                 :          0 :   calcDC ();
    2249                 :          0 :   saveOperatingPoints ();
    2250                 :            : 
    2251                 :            :   // fill in HB matrices
    2252         [ #  # ]:          0 :   for (int i1 = 0; i1 < 6; i1++) {
    2253         [ #  # ]:          0 :     setQ  (i1, _qhs[i1]); // charges
    2254         [ #  # ]:          0 :     setCV (i1, _chs[i1]); // jacobian dQ/dV * V
    2255         [ #  # ]:          0 :     setGV (i1, _ghs[i1]); // jacobian dI/dV * V
    2256         [ #  # ]:          0 :     for (int i2 = 0; i2 < 6; i2++) {
    2257         [ #  # ]:          0 :       setQV (i1, i2, _jdyna[i1][i2]); // jacobian dQ/dV
    2258                 :            :     }
    2259                 :            :   }
    2260                 :          0 : }
    2261                 :            : 
    2262                 :            : #include "EKV26MOS.defs.h"
    2263                 :            : 

Generated by: LCOV version 1.11