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