Branch data Line data Source code
1 : : /*
2 : : * nigbt.core.cpp - device implementations for nigbt 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 "nigbt.analogfunction.h"
16 : : #include "component.h"
17 : : #include "device.h"
18 : : #include "nigbt.core.h"
19 : :
20 : : #ifndef CIR_nigbt
21 : : #define CIR_nigbt -1
22 : : #endif
23 : :
24 : : // external nodes
25 : : #define C 0
26 : : #define G 1
27 : : #define E 2
28 : : // internal nodes
29 : : #define e 3
30 : : #define b 4
31 : : #define var_Ql 5
32 : : #define var_Mucinv 6
33 : : #define var_Nsat 7
34 : : #define var_dVecdt 8
35 : :
36 : : // useful macro definitions
37 : : #define NP(node) real (getV (node))
38 : : #define BP(pnode,nnode) (NP(pnode) - NP(nnode))
39 : : #define _load_static_residual2(pnode,nnode,current)\
40 : : _rhs[pnode] -= current;\
41 : : _rhs[nnode] += current;
42 : : #define _load_static_augmented_residual2(pnode,nnode,current)\
43 : : _rhs[pnode] -= current;\
44 : : _rhs[nnode] += current;
45 : : #define _load_static_residual1(node,current)\
46 : : _rhs[node] -= current;
47 : : #define _load_static_augmented_residual1(node,current)\
48 : : _rhs[node] -= current;
49 : : #define _load_static_jacobian4(pnode,nnode,vpnode,vnnode,conductance)\
50 : : _jstat[pnode][vpnode] += conductance;\
51 : : _jstat[nnode][vnnode] += conductance;\
52 : : _jstat[pnode][vnnode] -= conductance;\
53 : : _jstat[nnode][vpnode] -= conductance;\
54 : : if (doHB) {\
55 : : _ghs[pnode] += conductance * BP(vpnode,vnnode);\
56 : : _ghs[nnode] -= conductance * BP(vpnode,vnnode);\
57 : : } else {\
58 : : _rhs[pnode] += conductance * BP(vpnode,vnnode);\
59 : : _rhs[nnode] -= conductance * BP(vpnode,vnnode);\
60 : : }
61 : : #define _load_static_jacobian2p(node,vpnode,vnnode,conductance)\
62 : : _jstat[node][vpnode] += conductance;\
63 : : _jstat[node][vnnode] -= conductance;\
64 : : if (doHB) {\
65 : : _ghs[node] += conductance * BP(vpnode,vnnode);\
66 : : } else {\
67 : : _rhs[node] += conductance * BP(vpnode,vnnode);\
68 : : }
69 : : #define _load_static_jacobian2s(pnode,nnode,node,conductance)\
70 : : _jstat[pnode][node] += conductance;\
71 : : _jstat[nnode][node] -= conductance;\
72 : : if (doHB) {\
73 : : _ghs[pnode] += conductance * NP(node);\
74 : : _ghs[nnode] -= conductance * NP(node);\
75 : : } else {\
76 : : _rhs[pnode] += conductance * NP(node);\
77 : : _rhs[nnode] -= conductance * NP(node);\
78 : : }
79 : : #define _load_static_jacobian1(node,vnode,conductance)\
80 : : _jstat[node][vnode] += conductance;\
81 : : if (doHB) {\
82 : : _ghs[node] += conductance * NP(vnode);\
83 : : } else {\
84 : : _rhs[node] += conductance * NP(vnode);\
85 : : }
86 : : #define _load_dynamic_residual2(pnode,nnode,charge)\
87 : : if (doTR) _charges[pnode][nnode] += charge;\
88 : : if (doHB) {\
89 : : _qhs[pnode] -= charge;\
90 : : _qhs[nnode] += charge;\
91 : : }
92 : : #define _load_dynamic_residual1(node,charge)\
93 : : if (doTR) _charges[node][node] += charge;\
94 : : if (doHB) {\
95 : : _qhs[node] -= charge;\
96 : : }
97 : : #define _load_dynamic_jacobian4(pnode,nnode,vpnode,vnnode,capacitance)\
98 : : if (doAC) {\
99 : : _jdyna[pnode][vpnode] += capacitance;\
100 : : _jdyna[nnode][vnnode] += capacitance;\
101 : : _jdyna[pnode][vnnode] -= capacitance;\
102 : : _jdyna[nnode][vpnode] -= capacitance;\
103 : : }\
104 : : if (doTR) {\
105 : : _caps[pnode][nnode][vpnode][vnnode] += capacitance;\
106 : : }\
107 : : if (doHB) {\
108 : : _chs[pnode] += capacitance * BP(vpnode,vnnode);\
109 : : _chs[nnode] -= capacitance * BP(vpnode,vnnode);\
110 : : }
111 : : #define _load_dynamic_jacobian2s(pnode,nnode,vnode,capacitance)\
112 : : if (doAC) {\
113 : : _jdyna[pnode][vnode] += capacitance;\
114 : : _jdyna[nnode][vnode] -= capacitance;\
115 : : }\
116 : : if (doTR) {\
117 : : _caps[pnode][nnode][vnode][vnode] += capacitance;\
118 : : }\
119 : : if (doHB) {\
120 : : _chs[pnode] += capacitance * NP(vnode);\
121 : : _chs[nnode] -= capacitance * NP(vnode);\
122 : : }
123 : : #define _load_dynamic_jacobian2p(node,vpnode,vnnode,capacitance)\
124 : : if (doAC) {\
125 : : _jdyna[node][vpnode] += capacitance;\
126 : : _jdyna[node][vnnode] -= capacitance;\
127 : : }\
128 : : if (doTR) {\
129 : : _caps[node][node][vpnode][vnnode] += capacitance;\
130 : : }\
131 : : if (doHB) {\
132 : : _chs[node] += capacitance * BP(vpnode,vnnode);\
133 : : }
134 : : #define _load_dynamic_jacobian1(node,vnode,capacitance)\
135 : : if (doAC) {\
136 : : _jdyna[node][vnode] += capacitance;\
137 : : }\
138 : : if (doTR) {\
139 : : _caps[node][node][vnode][vnode] += capacitance;\
140 : : }\
141 : : if (doHB) {\
142 : : _chs[node] += capacitance * NP(vnode);\
143 : : }
144 : :
145 : : #define _save_whitenoise1(n1,pwr,type)\
146 : : _white_pwr[n1][n1] += pwr;
147 : : #define _save_whitenoise2(n1,n2,pwr,type)\
148 : : _white_pwr[n1][n2] += pwr;
149 : : #define _save_flickernoise1(n1,pwr,exp,type)\
150 : : _flicker_pwr[n1][n1] += pwr;\
151 : : _flicker_exp[n1][n1] += exp;
152 : : #define _save_flickernoise2(n1,n2,pwr,exp,type)\
153 : : _flicker_pwr[n1][n2] += pwr;\
154 : : _flicker_exp[n1][n2] += exp;
155 : : #define _load_whitenoise2(n1,n2,pwr)\
156 : : cy (n1,n2) -= pwr/kB/T0; cy (n2,n1) -= pwr/kB/T0;\
157 : : cy (n1,n1) += pwr/kB/T0; cy (n2,n2) += pwr/kB/T0;
158 : : #define _load_whitenoise1(n1,pwr)\
159 : : cy (n1,n1) += pwr/kB/T0;
160 : : #define _load_flickernoise2(n1,n2,pwr,exp)\
161 : : cy (n1,n2) -= pwr*pow(_freq,-exp)/kB/T0;\
162 : : cy (n2,n1) -= pwr*pow(_freq,-exp)/kB/T0;\
163 : : cy (n1,n1) += pwr*pow(_freq,-exp)/kB/T0;\
164 : : cy (n2,n2) += pwr*pow(_freq,-exp)/kB/T0;
165 : : #define _load_flickernoise1(n1,pwr,exp)\
166 : : cy (n1,n1) += pwr*pow(_freq,-exp)/kB/T0;
167 : :
168 : : // derivative helper macros
169 : : // transcendental LRM p. 59
170 : : #define m00_cos(v00,x) v00 = cos(x);
171 : : #define m10_cos(v10,v00,x) v10 = (-sin(x));
172 : : #define m00_sin(v00,x) v00 = sin(x);
173 : : #define m10_sin(v10,v00,x) v10 = (cos(x));
174 : : #define m00_tan(v00,x) v00 = tan(x);
175 : : #define m10_tan(v10,v00,x) v10 = (1.0/cos(x)/cos(x));
176 : : #define m00_cosh(v00,x) v00 = cosh(x);
177 : : #define m10_cosh(v10,v00,x) v10 = (sinh(x));
178 : : #define m00_sinh(v00,x) v00 = sinh(x);
179 : : #define m10_sinh(v10,v00,x) v10 = (cosh(x));
180 : : #define m00_tanh(v00,x) v00 = tanh(x);
181 : : #define m10_tanh(v10,v00,x) v10 = (1.0/cosh(x)/cosh(x));
182 : : #define m00_acos(v00,x) v00 = acos(x);
183 : : #define m10_acos(v10,v00,x) v10 = (-1.0/sqrt(1-x*x));
184 : : #define m00_asin(v00,x) v00 = asin(x);
185 : : #define m10_asin(v10,v00,x) v10 = (+1.0/sqrt(1-x*x));
186 : : #define m00_atan(v00,x) v00 = atan(x);
187 : : #define m10_atan(v10,v00,x) v10 = (+1.0/(1+x*x));
188 : : #define m00_hypot(v00,x,y) v00 = sqrt((x)*(x)+(y)*(y));
189 : : #define m10_hypot(v10,v00,x,y) v10 = (x)/(v00);
190 : : #define m11_hypot(v11,v00,x,y) v11 = (y)/(v00);
191 : : #define m00_atan2(v00,x,y) v00 = atan2(x,y);
192 : : // TODO atan2 derivatives ?
193 : : #define m00_acosh(v00,x) v00 = acosh(x);
194 : : #define m10_acosh(v10,v00,x) v10 = (1.0/(sqrt(x-1)*sqrt(x+1)));
195 : : #define m00_asinh(v00,x) v00 = asinh(x);
196 : : #define m10_asinh(v10,v00,x) v10 = (1.0/(sqrt(x*x+1)));
197 : : #define m00_atanh(v00,x) v00 = atanh(x);
198 : : #define m10_atanh(v10,v00,x) v10 = (1.0/(1-x*x));
199 : :
200 : :
201 : : // standard functions LRM p.58
202 : : #define m00_logE(v00,x) v00 = log(x);
203 : : #define m10_logE(v10,v00,x) v10 = (1.0/x);
204 : : #define m00_log10(v00,x) v00 = log10(x);
205 : : #define m10_log10(v10,v00,x) v10 = (1.0/x/M_LN10);
206 : : #define m00_exp(v00,x) v00 = exp(x);
207 : : #define m10_exp(v10,v00,x) v10 = v00;
208 : : #define m00_sqrt(v00,x) v00 = sqrt(x);
209 : : #define m10_sqrt(v10,v00,x) v10 = (0.5/v00);
210 : : #define m00_min(v00,x,y) v00 = ((x)<(y))?(x):(y);
211 : : #define m10_min(v10,v00,x,y) v10 = ((x)<(y))?1.0:0.0;
212 : : #define m11_min(v11,v00,x,y) v11 = ((x)<(y))?0.0:1.0;
213 : : #define m00_max(v00,x,y) v00 = ((x)>(y))?(x):(y);
214 : : #define m10_max(v10,v00,x,y) v10 = ((x)>(y))?1.0:0.0;
215 : : #define m11_max(v11,v00,x,y) v11 = ((x)>(y))?0.0:1.0;
216 : : #define m00_pow(v00,x,y) v00 = pow(x,y);
217 : : #define m10_pow(v10,v00,x,y) v10 = (x==0.0)?0.0:(v00)*(y)/(x);
218 : : #define m11_pow(v11,v00,x,y) v11 = (x==0.0)?0.0:(log(x)*(v00));
219 : : #define m00_abs(v00,x) v00 = ((x)<(0)?(-(x)):(x));
220 : : #define m10_abs(v10,v00,x) v10 = (((x)>=0)?(+1.0):(-1.0));
221 : : #define m00_floor(v00,x) v00 = floor(x);
222 : : #define m10_floor(v10,v00,x) v10 = 1.0;
223 : :
224 : : #define m00_ceil(v00,x) v00 = ceil(x);
225 : : // TODO ceil derivative, needed?
226 : :
227 : : // analog operator, LRM p.61
228 : : #define m00_limexp(v00,x) v00 = ((x)<80.0?exp(x):exp(80.0)*(x-79.0));
229 : : #define m10_limexp(v10,v00,x) v10 = ((x)<80.0?(v00):exp(80.0));
230 : :
231 : : // analog kernel parameter system functions, LRM p.215
232 : : #define m00_vt(x) (kBoverQ*(x))
233 : : #define m10_vt(x) (kBoverQ)
234 : :
235 : : // extra functions (?)
236 : : #define m00_div(v00,v10,x,y) double v10=1/(y); double v00=(x)*v10;
237 : : #define m10_div(v10,v00,vv,x,y)
238 : : #define m11_div(v11,v00,vv,x,y) double v11 = -v00*vv;
239 : : #define m00_mult(v00,v10,v11,x,y) double v10=(x); double v11=(y); double v00=v10*v11;
240 : : #define m00_add(v00,x,y) double v00=(x)+(y);
241 : :
242 : : // second derivatives
243 : : #define m20_logE(v00) (-1.0/v00/v00)
244 : : #define m20_exp(v00) exp(v00)
245 : : #define m20_limexp(v00) ((v00)<80.0?exp(v00):0.0)
246 : : #define m20_sqrt(v00) (-0.25/(v00)/sqrt(v00))
247 : : #define m20_abs(v00) 0.0
248 : : #define m20_pow(x,y) ((y)*((y)-1.0)*pow(x,y)/(x)/(x))
249 : :
250 : :
251 : : // simulator specific definitions
252 : : #define _modelname "nigbt"
253 : : #define _instancename getName()
254 : : #define _circuit_temp (getPropertyDouble("Temp")+273.15)
255 : : #define _param_given(p) (isPropertyGiven(p)?1:0)
256 : :
257 : :
258 : : // $vt and $vt() functions
259 : : #define _vt_nom (kBoverQ*_circuit_temp)
260 : :
261 : : using namespace qucs::device;
262 : : using qucs::matrix;
263 : :
264 : : /* Device constructor. */
265 : 0 : nigbt::nigbt() : circuit (9)
266 : : {
267 : 0 : type = CIR_nigbt;
268 : 0 : }
269 : :
270 : : /* Initialization of model. */
271 : 0 : void nigbt::initModel (void)
272 : : {
273 : : // create internal nodes
274 : 0 : setInternalNode (e, "e");
275 : 0 : setInternalNode (b, "b");
276 : 0 : setInternalNode (var_Ql, "var_Ql");
277 : 0 : setInternalNode (var_Mucinv, "var_Mucinv");
278 : 0 : setInternalNode (var_Nsat, "var_Nsat");
279 : 0 : setInternalNode (var_dVecdt, "var_dVecdt");
280 : :
281 : : // get device model parameters
282 : 0 : loadVariables ();
283 : : // evaluate global model equations
284 : 0 : initializeModel ();
285 : : // evaluate initial step equations
286 : 0 : initialStep ();
287 : : // evaluate global instance equations
288 : 0 : initializeInstance ();
289 : 0 : }
290 : :
291 : : /* Initialization of DC analysis. */
292 : 0 : void nigbt::initDC (void)
293 : : {
294 : 0 : allocMatrixMNA ();
295 : 0 : initModel ();
296 : 0 : pol = 1;
297 : 0 : restartDC ();
298 : 0 : doAC = 1;
299 : 0 : doTR = 0;
300 : 0 : doHB = 0;
301 : 0 : }
302 : :
303 : : /* Run when DC is restarted (fallback algorithms). */
304 : 0 : void nigbt::restartDC (void)
305 : : {
306 : 0 : }
307 : :
308 : : /* Initialize Verilog-AMS code. */
309 : 0 : void nigbt::initVerilog (void)
310 : : {
311 : : // initialization of noise variables
312 : :
313 : : int i1, i2, i3, i4;
314 : :
315 : : // zero charges
316 [ # # ]: 0 : for (i1 = 0; i1 < 9; i1++) {
317 [ # # ]: 0 : for (i2 = 0; i2 < 9; i2++) {
318 : 0 : _charges[i1][i2] = 0.0;
319 : : } }
320 : :
321 : : // zero capacitances
322 [ # # ]: 0 : for (i1 = 0; i1 < 9; i1++) {
323 [ # # ]: 0 : for (i2 = 0; i2 < 9; i2++) {
324 [ # # ]: 0 : for (i3 = 0; i3 < 9; i3++) {
325 [ # # ]: 0 : for (i4 = 0; i4 < 9; i4++) {
326 : 0 : _caps[i1][i2][i3][i4] = 0.0;
327 : : } } } }
328 : :
329 : : // zero right hand side, static and dynamic jacobian
330 [ # # ]: 0 : for (i1 = 0; i1 < 9; i1++) {
331 : 0 : _rhs[i1] = 0.0;
332 : 0 : _qhs[i1] = 0.0;
333 : 0 : _chs[i1] = 0.0;
334 : 0 : _ghs[i1] = 0.0;
335 [ # # ]: 0 : for (i2 = 0; i2 < 9; i2++) {
336 : 0 : _jstat[i1][i2] = 0.0;
337 : 0 : _jdyna[i1][i2] = 0.0;
338 : : }
339 : : }
340 : 0 : }
341 : :
342 : : /* Load device model input parameters. */
343 : 0 : void nigbt::loadVariables (void)
344 : : {
345 : 0 : Agd = getPropertyDouble ("Agd");
346 : 0 : Area = getPropertyDouble ("Area");
347 : 0 : Kp = getPropertyDouble ("Kp");
348 : 0 : Tau = getPropertyDouble ("Tau");
349 : 0 : Wb = getPropertyDouble ("Wb");
350 : 0 : BVf = getPropertyDouble ("BVf");
351 : 0 : BVn = getPropertyDouble ("BVn");
352 : 0 : Cgs = getPropertyDouble ("Cgs");
353 : 0 : Coxd = getPropertyDouble ("Coxd");
354 : 0 : Jsne = getPropertyDouble ("Jsne");
355 : 0 : Kf = getPropertyDouble ("Kf");
356 : 0 : Mun = getPropertyDouble ("Mun");
357 : 0 : Mup = getPropertyDouble ("Mup");
358 : 0 : Nb = getPropertyDouble ("Nb");
359 : 0 : Theta = getPropertyDouble ("Theta");
360 : 0 : Vt = getPropertyDouble ("Vt");
361 : 0 : Vtd = getPropertyDouble ("Vtd");
362 : 0 : Tnom = getPropertyDouble ("Tnom");
363 : 0 : }
364 : :
365 : : /* #define's for translated code */
366 : : #undef _DDT
367 : : #define _DDT(q) q
368 : : #define _DYNAMIC
369 : : #define _DERIVATE
370 : : #define _DDX
371 : : #define _DERIVATEFORDDX
372 : :
373 : : /* Evaluate Verilog-AMS equations in model initialization. */
374 : 0 : void nigbt::initializeModel (void)
375 : : {
376 : : double Dn;
377 : : double Nh;
378 : : #if defined(_DYNAMIC)
379 : : #endif
380 : : double To;
381 : : {
382 : 0 : Tj=_circuit_temp;
383 : 0 : To=(Tnom+273.15);
384 : 0 : A=Area;
385 : : #if defined(_DYNAMIC)
386 : 0 : Ads=(A-Agd);
387 : : #endif
388 : 0 : B=(Mun/Mup);
389 : : #if defined(_DYNAMIC)
390 : 0 : Nh=2.4e17;
391 : : #endif
392 : 0 : Nl=Nb;
393 : 0 : Ni=1.05e10;
394 : : {
395 : 0 : double m00_pow(d00_pow0,Tj,1.5)
396 : 0 : double m00_exp(d00_exp1,(7000.0/Tj))
397 : 0 : Ni=((3.88e16*d00_pow0)/d00_exp1);
398 : : }
399 : : {
400 : 0 : double m00_pow(d00_pow0,(300/Tj),0.87)
401 : 0 : Vnsat=(10.0e6*d00_pow0);
402 : : }
403 : : {
404 : 0 : double m00_pow(d00_pow0,(300/Tj),0.52)
405 : 0 : Vpsat=(8.37e6*d00_pow0);
406 : : }
407 : : {
408 : 0 : double m00_pow(d00_pow0,(Tj/300),1.5)
409 : 0 : Alpha1=(1.04e21*d00_pow0);
410 : : }
411 : : {
412 : 0 : double m00_pow(d00_pow0,(Tj/300),2.0)
413 : 0 : Alpha2=(7.45e13*d00_pow0);
414 : : }
415 : : {
416 : 0 : double m00_pow(d00_pow0,(Tj/To),(Jsne*A))
417 : 0 : double m00_exp(d00_exp1,(14000*((1/Tj)-(1/To))))
418 : 0 : Isne=(((Jsne*A)*d00_pow0)/d00_exp1);
419 : : }
420 : : {
421 : 0 : double m00_pow(d00_pow0,(To/Tj),Kp)
422 : 0 : KpT=(Kp*d00_pow0);
423 : : }
424 : 0 : Wl=Wb;
425 : 0 : Dp=(Mup*m00_vt(Tj));
426 : : #if defined(_DYNAMIC)
427 : 0 : Dn=(Mun*m00_vt(Tj));
428 : : #endif
429 : : }
430 : 0 : }
431 : :
432 : : /* Evaluate Verilog-AMS equations in instance initialization. */
433 : 0 : void nigbt::initializeInstance (void)
434 : : {
435 : 0 : }
436 : :
437 : : /* Evaluate Verilog-AMS equations in initial step. */
438 : 0 : void nigbt::initialStep (void)
439 : : {
440 : 0 : }
441 : :
442 : : /* Evaluate Verilog-AMS equations in final step. */
443 : 0 : void nigbt::finalStep (void)
444 : : {
445 : 0 : }
446 : :
447 : : /* Evaluate Verilog-AMS equations in analog block. */
448 : 0 : void nigbt::calcVerilog (void)
449 : : {
450 : :
451 : : /* ----------------- evaluate verilog analog equations -------------------- */
452 : : double iNsat;
453 : : #if defined(_DERIVATE)
454 : : double iNsat_VC_e;
455 : : double iNsat_Vvar_Ql_GND;
456 : : double iNsat_Vb_E;
457 : : double iNsat_Vvar_Nsat_GND;
458 : : double iNsat_Vvar_Mucinv_GND;
459 : : double iNsat_Vvar_dVecdt_GND;
460 : : double iNsat_VG_E;
461 : : #endif
462 : : double iQl;
463 : : #if defined(_DERIVATE)
464 : : double iQl_Vb_E;
465 : : double iQl_Vvar_Nsat_GND;
466 : : double iQl_Vvar_Ql_GND;
467 : : double iQl_Vvar_Mucinv_GND;
468 : : #endif
469 : : double iMucinv;
470 : : #if defined(_DERIVATE)
471 : : double iMucinv_Vvar_Ql_GND;
472 : : double iMucinv_Vvar_Mucinv_GND;
473 : : double iMucinv_Vb_E;
474 : : double iMucinv_Vvar_Nsat_GND;
475 : : #endif
476 : : #if defined(_DYNAMIC)
477 : : double Qmult;
478 : : #if defined(_DERIVATE)
479 : : double Qmult_Vb_E;
480 : : double Qmult_Vvar_Nsat_GND;
481 : : double Qmult_Vvar_Ql_GND;
482 : : double Qmult_Ve_E;
483 : : #endif
484 : : #endif
485 : : #if defined(_DYNAMIC)
486 : : double Qcer;
487 : : #if defined(_DERIVATE)
488 : : double Qcer_Vvar_Ql_GND;
489 : : double Qcer_Vb_E;
490 : : double Qcer_Vvar_Nsat_GND;
491 : : double Qcer_Ve_E;
492 : : #endif
493 : : #endif
494 : : #if defined(_DYNAMIC)
495 : : double Qgd;
496 : : #if defined(_DERIVATE)
497 : : double Qgd_Vb_G;
498 : : double Qgd_Vvar_Nsat_GND;
499 : : #endif
500 : : #endif
501 : : double Imult;
502 : : #if defined(_DERIVATE)
503 : : double Imult_Vb_E;
504 : : double Imult_Vvar_Nsat_GND;
505 : : double Imult_VG_E;
506 : : double Imult_VC_e;
507 : : double Imult_Vvar_Ql_GND;
508 : : double Imult_Vvar_Mucinv_GND;
509 : : double Imult_Vvar_dVecdt_GND;
510 : : #endif
511 : : double Igen;
512 : : #if defined(_DERIVATE)
513 : : double Igen_Vb_E;
514 : : double Igen_Vvar_Nsat_GND;
515 : : #endif
516 : : double Imos;
517 : : #if defined(_DERIVATE)
518 : : double Imos_Vb_E;
519 : : double Imos_VG_E;
520 : : #endif
521 : : double Ibss;
522 : : #if defined(_DERIVATE)
523 : : double Ibss_Vvar_Ql_GND;
524 : : double Ibss_Vb_E;
525 : : double Ibss_Vvar_Nsat_GND;
526 : : #endif
527 : : double Ic;
528 : : #if defined(_DERIVATE)
529 : : double Ic_VC_e;
530 : : double Ic_Vvar_Ql_GND;
531 : : double Ic_Vb_E;
532 : : double Ic_Vvar_Nsat_GND;
533 : : double Ic_Vvar_Mucinv_GND;
534 : : double Ic_Vvar_dVecdt_GND;
535 : : #endif
536 : : double Icss;
537 : : #if defined(_DERIVATE)
538 : : double Icss_VC_e;
539 : : double Icss_Vvar_Ql_GND;
540 : : double Icss_Vb_E;
541 : : double Icss_Vvar_Nsat_GND;
542 : : double Icss_Vvar_Mucinv_GND;
543 : : #endif
544 : : double It;
545 : : #if defined(_DERIVATE)
546 : : double It_VC_e;
547 : : double It_Vvar_Ql_GND;
548 : : double It_Vb_E;
549 : : double It_Vvar_Nsat_GND;
550 : : double It_Vvar_Mucinv_GND;
551 : : #endif
552 : : double M;
553 : : #if defined(_DERIVATE)
554 : : double M_Vb_E;
555 : : double M_Vvar_Nsat_GND;
556 : : #endif
557 : : double Vnrt;
558 : : #if defined(_DERIVATE)
559 : : double Vnrt_Vb_E;
560 : : #endif
561 : : double BVcbo;
562 : : #if defined(_DERIVATE)
563 : : double BVcbo_Vvar_Nsat_GND;
564 : : #endif
565 : : double Vebq;
566 : : double Vebd;
567 : : double Vebj;
568 : : double Rb;
569 : : #if defined(_DERIVATE)
570 : : double Rb_Vvar_Ql_GND;
571 : : double Rb_Vb_E;
572 : : double Rb_Vvar_Nsat_GND;
573 : : double Rb_Vvar_Mucinv_GND;
574 : : #endif
575 : : double Neff;
576 : : #if defined(_DERIVATE)
577 : : double Neff_Vb_E;
578 : : double Neff_Vvar_Nsat_GND;
579 : : double Neff_Vvar_Mucinv_GND;
580 : : double Neff_Vvar_Ql_GND;
581 : : #endif
582 : : double Deltap;
583 : : #if defined(_DERIVATE)
584 : : double Deltap_Vvar_Ql_GND;
585 : : double Deltap_Vvar_Mucinv_GND;
586 : : double Deltap_Vb_E;
587 : : double Deltap_Vvar_Nsat_GND;
588 : : #endif
589 : : double Plo;
590 : : #if defined(_DERIVATE)
591 : : double Plo_Vvar_Ql_GND;
592 : : double Plo_Vvar_Mucinv_GND;
593 : : double Plo_Vb_E;
594 : : double Plo_Vvar_Nsat_GND;
595 : : #endif
596 : : double Tanh;
597 : : #if defined(_DERIVATE)
598 : : double Tanh_Vb_E;
599 : : double Tanh_Vvar_Nsat_GND;
600 : : double Tanh_Vvar_Mucinv_GND;
601 : : #endif
602 : : double WL2;
603 : : #if defined(_DERIVATE)
604 : : double WL2_Vb_E;
605 : : double WL2_Vvar_Nsat_GND;
606 : : double WL2_Vvar_Mucinv_GND;
607 : : #endif
608 : : double WL;
609 : : #if defined(_DERIVATE)
610 : : double WL_Vb_E;
611 : : double WL_Vvar_Nsat_GND;
612 : : double WL_Vvar_Mucinv_GND;
613 : : #endif
614 : : double L;
615 : : #if defined(_DERIVATE)
616 : : double L_Vvar_Mucinv_GND;
617 : : #endif
618 : : double Dc;
619 : : #if defined(_DERIVATE)
620 : : double Dc_Vvar_Mucinv_GND;
621 : : #endif
622 : : double Mueff;
623 : : #if defined(_DERIVATE)
624 : : double Mueff_Vvar_Mucinv_GND;
625 : : double Mueff_Vvar_Ql_GND;
626 : : double Mueff_Vb_E;
627 : : double Mueff_Vvar_Nsat_GND;
628 : : #endif
629 : : double Mupc;
630 : : #if defined(_DERIVATE)
631 : : double Mupc_Vvar_Mucinv_GND;
632 : : #endif
633 : : double Munc;
634 : : #if defined(_DERIVATE)
635 : : double Munc_Vvar_Mucinv_GND;
636 : : #endif
637 : : #if defined(_DYNAMIC)
638 : : double Cgd;
639 : : #if defined(_DERIVATE)
640 : : double Cgd_Vb_G;
641 : : double Cgd_Vvar_Nsat_GND;
642 : : #endif
643 : : #endif
644 : : #if defined(_DYNAMIC)
645 : : double Cgdj;
646 : : #if defined(_DERIVATE)
647 : : double Cgdj_Vb_G;
648 : : double Cgdj_Vvar_Nsat_GND;
649 : : #endif
650 : : #endif
651 : : double Cdsj;
652 : : double Ccer;
653 : : #if defined(_DERIVATE)
654 : : double Ccer_Vvar_Ql_GND;
655 : : double Ccer_Vb_E;
656 : : double Ccer_Vvar_Nsat_GND;
657 : : #endif
658 : : double Cbcj;
659 : : #if defined(_DERIVATE)
660 : : double Cbcj_Vb_E;
661 : : double Cbcj_Vvar_Nsat_GND;
662 : : #endif
663 : : double Qbi;
664 : : double Qb;
665 : : #if defined(_DERIVATE)
666 : : double Qb_Vb_E;
667 : : double Qb_Vvar_Nsat_GND;
668 : : #endif
669 : : #if defined(_DYNAMIC)
670 : : double Qds;
671 : : #if defined(_DERIVATE)
672 : : double Qds_Vb_E;
673 : : double Qds_Vvar_Nsat_GND;
674 : : #endif
675 : : #endif
676 : : #if defined(_DYNAMIC)
677 : : double Qgs;
678 : : #if defined(_DERIVATE)
679 : : double Qgs_VG_E;
680 : : #endif
681 : : #endif
682 : : double W;
683 : : #if defined(_DERIVATE)
684 : : double W_Vb_E;
685 : : double W_Vvar_Nsat_GND;
686 : : #endif
687 : : double Wbcj;
688 : : #if defined(_DERIVATE)
689 : : double Wbcj_Vb_E;
690 : : double Wbcj_Vvar_Nsat_GND;
691 : : #endif
692 : : double Wdsj;
693 : : #if defined(_DYNAMIC)
694 : : double Wgdj;
695 : : #if defined(_DERIVATE)
696 : : double Wgdj_Vb_G;
697 : : double Wgdj_Vvar_Nsat_GND;
698 : : #endif
699 : : #endif
700 : : double Nscl;
701 : : #if defined(_DERIVATE)
702 : : double Nscl_Vvar_Nsat_GND;
703 : : #endif
704 : : double dVecdt;
705 : : #if defined(_DERIVATE)
706 : : double dVecdt_Vvar_dVecdt_GND;
707 : : #endif
708 : : double Mucinv;
709 : : #if defined(_DERIVATE)
710 : : double Mucinv_Vvar_Mucinv_GND;
711 : : #endif
712 : : double Nsat;
713 : : #if defined(_DERIVATE)
714 : : double Nsat_Vvar_Nsat_GND;
715 : : #endif
716 : : double Ql;
717 : : #if defined(_DERIVATE)
718 : : double Ql_Vvar_Ql_GND;
719 : : #endif
720 : : double Vth;
721 : : #if defined(_DERIVATE)
722 : : double Vth_VG_E;
723 : : #endif
724 : : double Vbc;
725 : : #if defined(_DERIVATE)
726 : : double Vbc_Vb_E;
727 : : #endif
728 : : double Vec;
729 : : #if defined(_DERIVATE)
730 : : double Vec_Ve_E;
731 : : #endif
732 : : double Vae;
733 : : #if defined(_DERIVATE)
734 : : double Vae_VC_e;
735 : : #endif
736 : : double Veb;
737 : : #if defined(_DERIVATE)
738 : : double Veb_Ve_b;
739 : : #endif
740 : : double Vds;
741 : : #if defined(_DERIVATE)
742 : : double Vds_Vb_E;
743 : : #endif
744 : : double Vgs;
745 : : #if defined(_DERIVATE)
746 : : double Vgs_VG_E;
747 : : #endif
748 : : double Vdg;
749 : : #if defined(_DERIVATE)
750 : : double Vdg_Vb_G;
751 : : #endif
752 : : #if defined(_DERIVATE)
753 : 0 : Vdg_Vb_G=1.0;
754 : : #endif
755 [ # # ]: 0 : Vdg=BP(b,G);
756 : : #if defined(_DERIVATE)
757 : 0 : Vgs_VG_E=1.0;
758 : : #endif
759 [ # # ]: 0 : Vgs=BP(G,E);
760 : : #if defined(_DERIVATE)
761 : 0 : Vds_Vb_E=1.0;
762 : : #endif
763 [ # # ]: 0 : Vds=BP(b,E);
764 : : #if defined(_DERIVATE)
765 : 0 : Veb_Ve_b=1.0;
766 : : #endif
767 [ # # ]: 0 : Veb=BP(e,b);
768 : : #if defined(_DERIVATE)
769 : 0 : Vae_VC_e=1.0;
770 : : #endif
771 [ # # ]: 0 : Vae=BP(C,e);
772 : : #if defined(_DERIVATE)
773 : 0 : Vec_Ve_E=1.0;
774 : : #endif
775 [ # # ]: 0 : Vec=BP(e,E);
776 : : #if defined(_DERIVATE)
777 : 0 : Vbc_Vb_E=Vds_Vb_E;
778 : : #endif
779 : 0 : Vbc=Vds;
780 : : #if defined(_DERIVATE)
781 : 0 : Vth_VG_E=Vgs_VG_E;
782 : : #endif
783 : 0 : Vth=(Vgs-Vt);
784 : : #if defined(_DERIVATE)
785 : 0 : Ql_Vvar_Ql_GND=1.0;
786 : : #endif
787 : 0 : Ql=NP(var_Ql);
788 : : #if defined(_DERIVATE)
789 : 0 : Nsat_Vvar_Nsat_GND=1.0;
790 : : #endif
791 : 0 : Nsat=NP(var_Nsat);
792 : : #if defined(_DERIVATE)
793 : 0 : Mucinv_Vvar_Mucinv_GND=1.0;
794 : : #endif
795 : 0 : Mucinv=NP(var_Mucinv);
796 : : #if defined(_DERIVATE)
797 : 0 : dVecdt_Vvar_dVecdt_GND=1.0;
798 : : #endif
799 : 0 : dVecdt=NP(var_dVecdt);
800 : : {
801 [ # # ]: 0 : double m00_max(d00_max0,(Nl+Nsat),1e-20)
802 : : #if defined(_DERIVATE)
803 [ # # ]: 0 : double m10_max(d10_max0,d00_max0,(Nl+Nsat),1e-20)
804 : : #endif
805 : : #if defined(_DERIVATE)
806 : 0 : Nscl_Vvar_Nsat_GND=(d10_max0*Nsat_Vvar_Nsat_GND);
807 : : #endif
808 : 0 : Nscl=d00_max0;
809 : : }
810 : : #ifdef _DYNAMIC
811 [ # # ]: 0 : if
812 : : (Vdg>(-Vtd))
813 : : {
814 : : #if defined(_DYNAMIC)
815 : : {
816 : 0 : double m00_sqrt(d00_sqrt0,((((2*1.03594e-10)*(Vdg+Vtd))/1.602176462e-19)/Nscl))
817 [ # # ]: 0 : double m00_min(d00_min1,d00_sqrt0,Wl)
818 : : #if defined(_DERIVATE)
819 : 0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((((2*1.03594e-10)*(Vdg+Vtd))/1.602176462e-19)/Nscl))
820 [ # # ]: 0 : double m10_min(d10_min1,d00_min1,d00_sqrt0,Wl)
821 : : #endif
822 : : #if defined(_DERIVATE)
823 : 0 : Wgdj_Vb_G=(d10_min1*((((2*1.03594e-10)*Vdg_Vb_G)/1.602176462e-19)/Nscl)*d10_sqrt0);
824 : 0 : Wgdj_Vvar_Nsat_GND=(d10_min1*(-(((2*1.03594e-10)*(Vdg+Vtd))/1.602176462e-19)*Nscl_Vvar_Nsat_GND/Nscl/Nscl)*d10_sqrt0);
825 : : #endif
826 : 0 : Wgdj=d00_min1;
827 : : }
828 : : #endif
829 : : }
830 : : else
831 : : {
832 : : #if defined(_DYNAMIC)
833 : : #if defined(_DERIVATE)
834 : 0 : Wgdj_Vb_G=0.0;
835 : 0 : Wgdj_Vvar_Nsat_GND=0.0;
836 : : #endif
837 : 0 : Wgdj=0;
838 : : #endif
839 : : }
840 : : #endif /* if (...) */
841 : : #ifdef _DYNAMIC
842 [ # # ]: 0 : if
843 : : (Vds>(-0.6))
844 : : {
845 : : #if defined(_DYNAMIC)
846 : : {
847 : 0 : double m00_sqrt(d00_sqrt0,((((2*1.03594e-10)*(Vds+0.6))/1.602176462e-19)/Nscl))
848 [ # # ]: 0 : double m00_min(d00_min1,d00_sqrt0,Wl)
849 : : #if defined(_DERIVATE)
850 : 0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((((2*1.03594e-10)*(Vds+0.6))/1.602176462e-19)/Nscl))
851 [ # # ]: 0 : double m10_min(d10_min1,d00_min1,d00_sqrt0,Wl)
852 : : #endif
853 : 0 : Wdsj=d00_min1;
854 : : }
855 : : #endif
856 : : }
857 : : else
858 : : {
859 : : #if defined(_DYNAMIC)
860 : 0 : Wdsj=0;
861 : : #endif
862 : : }
863 : : #endif /* if (...) */
864 [ # # ]: 0 : if
865 : : (Vbc>(-0.6))
866 : : {
867 : : {
868 : 0 : double m00_sqrt(d00_sqrt0,((((2*1.03594e-10)*(Vbc+0.6))/1.602176462e-19)/Nscl))
869 [ # # ]: 0 : double m00_min(d00_min1,d00_sqrt0,Wl)
870 : : #if defined(_DERIVATE)
871 : 0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((((2*1.03594e-10)*(Vbc+0.6))/1.602176462e-19)/Nscl))
872 [ # # ]: 0 : double m10_min(d10_min1,d00_min1,d00_sqrt0,Wl)
873 : : #endif
874 : : #if defined(_DERIVATE)
875 : 0 : Wbcj_Vb_E=(d10_min1*((((2*1.03594e-10)*Vbc_Vb_E)/1.602176462e-19)/Nscl)*d10_sqrt0);
876 : 0 : Wbcj_Vvar_Nsat_GND=(d10_min1*(-(((2*1.03594e-10)*(Vbc+0.6))/1.602176462e-19)*Nscl_Vvar_Nsat_GND/Nscl/Nscl)*d10_sqrt0);
877 : : #endif
878 : 0 : Wbcj=d00_min1;
879 : : }
880 : : }
881 : : else
882 : : {
883 : : #if defined(_DERIVATE)
884 : 0 : Wbcj_Vb_E=0.0;
885 : 0 : Wbcj_Vvar_Nsat_GND=0.0;
886 : : #endif
887 : 0 : Wbcj=0;
888 : : }
889 : : #if defined(_DERIVATE)
890 : 0 : W_Vb_E=(-Wbcj_Vb_E);
891 : 0 : W_Vvar_Nsat_GND=(-Wbcj_Vvar_Nsat_GND);
892 : : #endif
893 : 0 : W=(Wl-Wbcj);
894 : : #if defined(_DYNAMIC)
895 : : #if defined(_DERIVATE)
896 : 0 : Qgs_VG_E=(Cgs*Vgs_VG_E);
897 : : #endif
898 : 0 : Qgs=(Cgs*Vgs);
899 : : #endif
900 : : #ifdef _DYNAMIC
901 [ # # ]: 0 : if
902 : : (Vds>(-0.6))
903 : : {
904 : : #if defined(_DYNAMIC)
905 : : {
906 : 0 : double m00_sqrt(d00_sqrt0,((((2*1.03594e-10)*(Vds+0.6))*1.602176462e-19)*Nscl))
907 : : #if defined(_DERIVATE)
908 : 0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((((2*1.03594e-10)*(Vds+0.6))*1.602176462e-19)*Nscl))
909 : : #endif
910 : : #if defined(_DERIVATE)
911 : 0 : Qds_Vb_E=(Ads*((2*1.03594e-10)*Vds_Vb_E)*1.602176462e-19*Nscl*d10_sqrt0);
912 : 0 : Qds_Vvar_Nsat_GND=(Ads*((((2*1.03594e-10)*(Vds+0.6))*1.602176462e-19)*Nscl_Vvar_Nsat_GND)*d10_sqrt0);
913 : : #endif
914 : 0 : Qds=(Ads*d00_sqrt0);
915 : : }
916 : : #endif
917 : : }
918 : : else
919 : : {
920 : : #if defined(_DYNAMIC)
921 : : #if defined(_DERIVATE)
922 : 0 : Qds_Vb_E=0.0;
923 : 0 : Qds_Vvar_Nsat_GND=0.0;
924 : : #endif
925 : 0 : Qds=0;
926 : : #endif
927 : : }
928 : : #endif /* if (...) */
929 : : #if defined(_DERIVATE)
930 : 0 : Qb_Vb_E=((1.602176462e-19*A)*W_Vb_E)*Nscl;
931 : 0 : Qb_Vvar_Nsat_GND=((((1.602176462e-19*A)*W_Vvar_Nsat_GND)*Nscl)+(((1.602176462e-19*A)*W)*Nscl_Vvar_Nsat_GND));
932 : : #endif
933 : 0 : Qb=(((1.602176462e-19*A)*W)*Nscl);
934 : : #if defined(_DYNAMIC)
935 : : {
936 : 0 : double m00_sqrt(d00_sqrt0,((((2*1.03594e-10)*1.602176462e-19)*Nl)*0.6))
937 : 0 : Qbi=(A*d00_sqrt0);
938 : : }
939 : : #endif
940 : : #if defined(_DERIVATE)
941 : 0 : Cbcj_Vb_E=(-(A*1.03594e-10)*Wbcj_Vb_E/(Wbcj+1e-20)/(Wbcj+1e-20));
942 : 0 : Cbcj_Vvar_Nsat_GND=(-(A*1.03594e-10)*Wbcj_Vvar_Nsat_GND/(Wbcj+1e-20)/(Wbcj+1e-20));
943 : : #endif
944 : 0 : Cbcj=((A*1.03594e-10)/(Wbcj+1e-20));
945 : : #if defined(_DERIVATE)
946 : 0 : Ccer_Vvar_Ql_GND=((Ql_Vvar_Ql_GND*Cbcj/3)/(Qb+1e-20));
947 : 0 : Ccer_Vb_E=((((Ql*Cbcj_Vb_E)/3)*(Qb+1e-20)-((Ql*Cbcj)/3)*Qb_Vb_E)/(Qb+1e-20)/(Qb+1e-20));
948 : 0 : Ccer_Vvar_Nsat_GND=((((Ql*Cbcj_Vvar_Nsat_GND)/3)*(Qb+1e-20)-((Ql*Cbcj)/3)*Qb_Vvar_Nsat_GND)/(Qb+1e-20)/(Qb+1e-20));
949 : : #endif
950 : 0 : Ccer=(((Ql*Cbcj)/3)/(Qb+1e-20));
951 : : #if defined(_DYNAMIC)
952 : 0 : Cdsj=((Ads*1.03594e-10)/(Wdsj+1e-20));
953 : : #endif
954 : : #if defined(_DYNAMIC)
955 : : #if defined(_DERIVATE)
956 : 0 : Cgdj_Vb_G=(-(Agd*1.03594e-10)*Wgdj_Vb_G/(Wgdj+1e-20)/(Wgdj+1e-20));
957 : 0 : Cgdj_Vvar_Nsat_GND=(-(Agd*1.03594e-10)*Wgdj_Vvar_Nsat_GND/(Wgdj+1e-20)/(Wgdj+1e-20));
958 : : #endif
959 : 0 : Cgdj=((Agd*1.03594e-10)/(Wgdj+1e-20));
960 : : #endif
961 : : #ifdef _DYNAMIC
962 [ # # ]: 0 : if
963 : : (Vds<(Vgs-Vtd))
964 : : {
965 : : #if defined(_DYNAMIC)
966 : : #if defined(_DERIVATE)
967 : 0 : Cgd_Vb_G=0.0;
968 : 0 : Cgd_Vvar_Nsat_GND=0.0;
969 : : #endif
970 : 0 : Cgd=Coxd;
971 : : #endif
972 : : }
973 : : else
974 : : {
975 : : #if defined(_DYNAMIC)
976 : : #if defined(_DERIVATE)
977 : 0 : Cgd_Vb_G=(((Coxd*Cgdj_Vb_G)*(Coxd+Cgdj)-(Coxd*Cgdj)*Cgdj_Vb_G)/(Coxd+Cgdj)/(Coxd+Cgdj));
978 : 0 : Cgd_Vvar_Nsat_GND=(((Coxd*Cgdj_Vvar_Nsat_GND)*(Coxd+Cgdj)-(Coxd*Cgdj)*Cgdj_Vvar_Nsat_GND)/(Coxd+Cgdj)/(Coxd+Cgdj));
979 : : #endif
980 : 0 : Cgd=((Coxd*Cgdj)/(Coxd+Cgdj));
981 : : #endif
982 : : }
983 : : #endif /* if (...) */
984 : : #if defined(_DERIVATE)
985 : 0 : Munc_Vvar_Mucinv_GND=(-1*Mucinv_Vvar_Mucinv_GND/((1/Mun)+Mucinv)/((1/Mun)+Mucinv));
986 : : #endif
987 : 0 : Munc=(1/((1/Mun)+Mucinv));
988 : : #if defined(_DERIVATE)
989 : 0 : Mupc_Vvar_Mucinv_GND=(-1*Mucinv_Vvar_Mucinv_GND/((1/Mup)+Mucinv)/((1/Mup)+Mucinv));
990 : : #endif
991 : 0 : Mupc=(1/((1/Mup)+Mucinv));
992 [ # # ]: 0 : if
993 : : (Ql>0)
994 : : {
995 : : #if defined(_DERIVATE)
996 : 0 : Mueff_Vvar_Mucinv_GND=(Munc_Vvar_Mucinv_GND+(Mupc_Vvar_Mucinv_GND*Ql/(Ql+Qb)));
997 : 0 : Mueff_Vvar_Ql_GND=(((Mupc*Ql_Vvar_Ql_GND)*(Ql+Qb)-(Mupc*Ql)*Ql_Vvar_Ql_GND)/(Ql+Qb)/(Ql+Qb));
998 : 0 : Mueff_Vb_E=(-(Mupc*Ql)*Qb_Vb_E/(Ql+Qb)/(Ql+Qb));
999 : 0 : Mueff_Vvar_Nsat_GND=(-(Mupc*Ql)*Qb_Vvar_Nsat_GND/(Ql+Qb)/(Ql+Qb));
1000 : : #endif
1001 : 0 : Mueff=(Munc+((Mupc*Ql)/(Ql+Qb)));
1002 : : }
1003 : : else
1004 : : {
1005 : : #if defined(_DERIVATE)
1006 : 0 : Mueff_Vvar_Mucinv_GND=Munc_Vvar_Mucinv_GND;
1007 : 0 : Mueff_Vvar_Ql_GND=0.0;
1008 : 0 : Mueff_Vb_E=0.0;
1009 : 0 : Mueff_Vvar_Nsat_GND=0.0;
1010 : : #endif
1011 : 0 : Mueff=Munc;
1012 : : }
1013 : : #if defined(_DERIVATE)
1014 : 0 : Dc_Vvar_Mucinv_GND=(((((((2*0.0*m10_vt(Tj))*Munc)+((2*m00_vt(Tj))*Munc_Vvar_Mucinv_GND))*Mupc)+(((2*m00_vt(Tj))*Munc)*Mupc_Vvar_Mucinv_GND))*(Munc+Mupc)-(((2*m00_vt(Tj))*Munc)*Mupc)*(Munc_Vvar_Mucinv_GND+Mupc_Vvar_Mucinv_GND))/(Munc+Mupc)/(Munc+Mupc));
1015 : : #endif
1016 : 0 : Dc=((((2*m00_vt(Tj))*Munc)*Mupc)/(Munc+Mupc));
1017 : : {
1018 : 0 : double m00_sqrt(d00_sqrt0,(Dc*Tau))
1019 : : #if defined(_DERIVATE)
1020 : 0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,(Dc*Tau))
1021 : : #endif
1022 : : #if defined(_DERIVATE)
1023 : 0 : L_Vvar_Mucinv_GND=Dc_Vvar_Mucinv_GND*Tau*d10_sqrt0;
1024 : : #endif
1025 : 0 : L=d00_sqrt0;
1026 : : }
1027 : : #if defined(_DERIVATE)
1028 : 0 : WL_Vb_E=(W_Vb_E/L);
1029 : 0 : WL_Vvar_Nsat_GND=(W_Vvar_Nsat_GND/L);
1030 : 0 : WL_Vvar_Mucinv_GND=(-W*L_Vvar_Mucinv_GND/L/L);
1031 : : #endif
1032 : 0 : WL=(W/L);
1033 : : #if defined(_DERIVATE)
1034 : 0 : WL2_Vb_E=(WL_Vb_E/2);
1035 : 0 : WL2_Vvar_Nsat_GND=(WL_Vvar_Nsat_GND/2);
1036 : 0 : WL2_Vvar_Mucinv_GND=(WL_Vvar_Mucinv_GND/2);
1037 : : #endif
1038 : 0 : WL2=(WL/2);
1039 : : {
1040 : 0 : double m00_tanh(d00_tanh0,WL2)
1041 : : #if defined(_DERIVATE)
1042 : 0 : double m10_tanh(d10_tanh0,d00_tanh0,WL2)
1043 : : #endif
1044 : : #if defined(_DERIVATE)
1045 : 0 : Tanh_Vb_E=WL2_Vb_E*d10_tanh0;
1046 : 0 : Tanh_Vvar_Nsat_GND=WL2_Vvar_Nsat_GND*d10_tanh0;
1047 : 0 : Tanh_Vvar_Mucinv_GND=WL2_Vvar_Mucinv_GND*d10_tanh0;
1048 : : #endif
1049 : 0 : Tanh=d00_tanh0;
1050 : : }
1051 [ # # ]: 0 : if
1052 : : (WL>0)
1053 : : {
1054 : : #if defined(_DERIVATE)
1055 : 0 : Plo_Vvar_Ql_GND=(Ql_Vvar_Ql_GND/(((1.602176462e-19*A)*L)*Tanh));
1056 : 0 : Plo_Vvar_Mucinv_GND=(-Ql*((((1.602176462e-19*A)*L_Vvar_Mucinv_GND)*Tanh)+(((1.602176462e-19*A)*L)*Tanh_Vvar_Mucinv_GND))/(((1.602176462e-19*A)*L)*Tanh)/(((1.602176462e-19*A)*L)*Tanh));
1057 : 0 : Plo_Vb_E=(-Ql*(((1.602176462e-19*A)*L)*Tanh_Vb_E)/(((1.602176462e-19*A)*L)*Tanh)/(((1.602176462e-19*A)*L)*Tanh));
1058 : 0 : Plo_Vvar_Nsat_GND=(-Ql*(((1.602176462e-19*A)*L)*Tanh_Vvar_Nsat_GND)/(((1.602176462e-19*A)*L)*Tanh)/(((1.602176462e-19*A)*L)*Tanh));
1059 : : #endif
1060 : 0 : Plo=(Ql/(((1.602176462e-19*A)*L)*Tanh));
1061 : : }
1062 : : else
1063 : : {
1064 : : #if defined(_DERIVATE)
1065 : 0 : Plo_Vvar_Ql_GND=0.0;
1066 : 0 : Plo_Vvar_Mucinv_GND=0.0;
1067 : 0 : Plo_Vb_E=0.0;
1068 : 0 : Plo_Vvar_Nsat_GND=0.0;
1069 : : #endif
1070 : 0 : Plo=0;
1071 : : }
1072 [ # # ]: 0 : if
1073 : : (WL>0)
1074 : : {
1075 : : {
1076 : 0 : double m00_sinh(d00_sinh0,WL2)
1077 : 0 : double m00_sinh(d00_sinh1,WL)
1078 : : #if defined(_DERIVATE)
1079 : 0 : double m10_sinh(d10_sinh0,d00_sinh0,WL2)
1080 : 0 : double m10_sinh(d10_sinh1,d00_sinh1,WL)
1081 : : #endif
1082 : : #if defined(_DERIVATE)
1083 : 0 : Deltap_Vvar_Ql_GND=(Plo_Vvar_Ql_GND*d00_sinh0/d00_sinh1);
1084 : 0 : Deltap_Vvar_Mucinv_GND=((((Plo_Vvar_Mucinv_GND*d00_sinh0)+(Plo*WL2_Vvar_Mucinv_GND*d10_sinh0))*d00_sinh1-(Plo*d00_sinh0)*WL_Vvar_Mucinv_GND*d10_sinh1)/d00_sinh1/d00_sinh1);
1085 : 0 : Deltap_Vb_E=((((Plo_Vb_E*d00_sinh0)+(Plo*WL2_Vb_E*d10_sinh0))*d00_sinh1-(Plo*d00_sinh0)*WL_Vb_E*d10_sinh1)/d00_sinh1/d00_sinh1);
1086 : 0 : Deltap_Vvar_Nsat_GND=((((Plo_Vvar_Nsat_GND*d00_sinh0)+(Plo*WL2_Vvar_Nsat_GND*d10_sinh0))*d00_sinh1-(Plo*d00_sinh0)*WL_Vvar_Nsat_GND*d10_sinh1)/d00_sinh1/d00_sinh1);
1087 : : #endif
1088 : 0 : Deltap=((Plo*d00_sinh0)/d00_sinh1);
1089 : : }
1090 : : }
1091 : : else
1092 : : {
1093 : : #if defined(_DERIVATE)
1094 : 0 : Deltap_Vvar_Ql_GND=0.0;
1095 : 0 : Deltap_Vvar_Mucinv_GND=0.0;
1096 : 0 : Deltap_Vb_E=0.0;
1097 : 0 : Deltap_Vvar_Nsat_GND=0.0;
1098 : : #endif
1099 : 0 : Deltap=0;
1100 : : }
1101 [ # # ]: 0 : if
1102 : : (WL>0)
1103 : : {
1104 : : double Nl2;
1105 : : double Plo2;
1106 : : double Con2;
1107 : : double Con3;
1108 : : double Con4;
1109 : : #if defined(_DERIVATE)
1110 : : double Plo2_Vvar_Ql_GND;
1111 : : #endif
1112 : : #if defined(_DERIVATE)
1113 : : double Plo2_Vvar_Mucinv_GND;
1114 : : #endif
1115 : : #if defined(_DERIVATE)
1116 : : double Plo2_Vb_E;
1117 : : #endif
1118 : : #if defined(_DERIVATE)
1119 : : double Plo2_Vvar_Nsat_GND;
1120 : : #endif
1121 : : #if defined(_DERIVATE)
1122 : : double Con2_Vb_E;
1123 : : #endif
1124 : : #if defined(_DERIVATE)
1125 : : double Con2_Vvar_Nsat_GND;
1126 : : #endif
1127 : : #if defined(_DERIVATE)
1128 : : double Con2_Vvar_Mucinv_GND;
1129 : : #endif
1130 : : #if defined(_DERIVATE)
1131 : : double Con3_Vvar_Ql_GND;
1132 : : #endif
1133 : : #if defined(_DERIVATE)
1134 : : double Con3_Vvar_Mucinv_GND;
1135 : : #endif
1136 : : #if defined(_DERIVATE)
1137 : : double Con3_Vb_E;
1138 : : #endif
1139 : : #if defined(_DERIVATE)
1140 : : double Con3_Vvar_Nsat_GND;
1141 : : #endif
1142 : : #if defined(_DERIVATE)
1143 : : double Con4_Vvar_Ql_GND;
1144 : : #endif
1145 : : #if defined(_DERIVATE)
1146 : : double Con4_Vvar_Mucinv_GND;
1147 : : #endif
1148 : : #if defined(_DERIVATE)
1149 : : double Con4_Vb_E;
1150 : : #endif
1151 : : #if defined(_DERIVATE)
1152 : : double Con4_Vvar_Nsat_GND;
1153 : : #endif
1154 : 0 : Nl2=(Nl*Nl);
1155 : : #if defined(_DERIVATE)
1156 : 0 : Plo2_Vvar_Ql_GND=((Plo_Vvar_Ql_GND*Plo)+(Plo*Plo_Vvar_Ql_GND));
1157 : 0 : Plo2_Vvar_Mucinv_GND=((Plo_Vvar_Mucinv_GND*Plo)+(Plo*Plo_Vvar_Mucinv_GND));
1158 : 0 : Plo2_Vb_E=((Plo_Vb_E*Plo)+(Plo*Plo_Vb_E));
1159 : 0 : Plo2_Vvar_Nsat_GND=((Plo_Vvar_Nsat_GND*Plo)+(Plo*Plo_Vvar_Nsat_GND));
1160 : : #endif
1161 : 0 : Plo2=(Plo*Plo);
1162 : : {
1163 : 0 : double m00_sinh(d00_sinh0,WL)
1164 : : #if defined(_DERIVATE)
1165 : 0 : double m10_sinh(d10_sinh0,d00_sinh0,WL)
1166 : : #endif
1167 : : #if defined(_DERIVATE)
1168 : 0 : Con2_Vb_E=(-1*WL_Vb_E*d10_sinh0/d00_sinh0/d00_sinh0);
1169 : 0 : Con2_Vvar_Nsat_GND=(-1*WL_Vvar_Nsat_GND*d10_sinh0/d00_sinh0/d00_sinh0);
1170 : 0 : Con2_Vvar_Mucinv_GND=(-1*WL_Vvar_Mucinv_GND*d10_sinh0/d00_sinh0/d00_sinh0);
1171 : : #endif
1172 : 0 : Con2=(1/d00_sinh0);
1173 : : }
1174 : : #if defined(_DERIVATE)
1175 : 0 : Con3_Vvar_Ql_GND=Plo2_Vvar_Ql_GND*Con2*Con2;
1176 : 0 : Con3_Vvar_Mucinv_GND=((((Plo2_Vvar_Mucinv_GND*Con2)+(Plo2*Con2_Vvar_Mucinv_GND))*Con2)+((Plo2*Con2)*Con2_Vvar_Mucinv_GND));
1177 : 0 : Con3_Vb_E=((((Plo2_Vb_E*Con2)+(Plo2*Con2_Vb_E))*Con2)+((Plo2*Con2)*Con2_Vb_E));
1178 : 0 : Con3_Vvar_Nsat_GND=((((Plo2_Vvar_Nsat_GND*Con2)+(Plo2*Con2_Vvar_Nsat_GND))*Con2)+((Plo2*Con2)*Con2_Vvar_Nsat_GND));
1179 : : #endif
1180 : 0 : Con3=((Plo2*Con2)*Con2);
1181 : : {
1182 : 0 : double m00_sqrt(d00_sqrt0,(Nl2+Con3))
1183 : : #if defined(_DERIVATE)
1184 : 0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,(Nl2+Con3))
1185 : : #endif
1186 : : #if defined(_DERIVATE)
1187 : 0 : Con4_Vvar_Ql_GND=((Con3_Vvar_Ql_GND*d10_sqrt0*Tanh*(Nl+((Plo*Con2)*Tanh))-(d00_sqrt0*Tanh)*Plo_Vvar_Ql_GND*Con2*Tanh)/(Nl+((Plo*Con2)*Tanh))/(Nl+((Plo*Con2)*Tanh)));
1188 : 0 : Con4_Vvar_Mucinv_GND=((((Con3_Vvar_Mucinv_GND*d10_sqrt0*Tanh)+(d00_sqrt0*Tanh_Vvar_Mucinv_GND))*(Nl+((Plo*Con2)*Tanh))-(d00_sqrt0*Tanh)*((((Plo_Vvar_Mucinv_GND*Con2)+(Plo*Con2_Vvar_Mucinv_GND))*Tanh)+((Plo*Con2)*Tanh_Vvar_Mucinv_GND)))/(Nl+((Plo*Con2)*Tanh))/(Nl+((Plo*Con2)*Tanh)));
1189 : 0 : Con4_Vb_E=((((Con3_Vb_E*d10_sqrt0*Tanh)+(d00_sqrt0*Tanh_Vb_E))*(Nl+((Plo*Con2)*Tanh))-(d00_sqrt0*Tanh)*((((Plo_Vb_E*Con2)+(Plo*Con2_Vb_E))*Tanh)+((Plo*Con2)*Tanh_Vb_E)))/(Nl+((Plo*Con2)*Tanh))/(Nl+((Plo*Con2)*Tanh)));
1190 : 0 : Con4_Vvar_Nsat_GND=((((Con3_Vvar_Nsat_GND*d10_sqrt0*Tanh)+(d00_sqrt0*Tanh_Vvar_Nsat_GND))*(Nl+((Plo*Con2)*Tanh))-(d00_sqrt0*Tanh)*((((Plo_Vvar_Nsat_GND*Con2)+(Plo*Con2_Vvar_Nsat_GND))*Tanh)+((Plo*Con2)*Tanh_Vvar_Nsat_GND)))/(Nl+((Plo*Con2)*Tanh))/(Nl+((Plo*Con2)*Tanh)));
1191 : : #endif
1192 : 0 : Con4=((d00_sqrt0*Tanh)/(Nl+((Plo*Con2)*Tanh)));
1193 : : }
1194 : : {
1195 : 0 : double m00_sqrt(d00_sqrt0,(Nl2+Con3))
1196 : 0 : double m00_atanh(d00_atanh1,Con4)
1197 : : #if defined(_DERIVATE)
1198 : 0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,(Nl2+Con3))
1199 : 0 : double m10_atanh(d10_atanh1,d00_atanh1,Con4)
1200 : : #endif
1201 : : #if defined(_DERIVATE)
1202 : 0 : Neff_Vb_E=((((WL2_Vb_E*d00_sqrt0)+(WL2*Con3_Vb_E*d10_sqrt0))*d00_atanh1-(WL2*d00_sqrt0)*Con4_Vb_E*d10_atanh1)/d00_atanh1/d00_atanh1);
1203 : 0 : Neff_Vvar_Nsat_GND=((((WL2_Vvar_Nsat_GND*d00_sqrt0)+(WL2*Con3_Vvar_Nsat_GND*d10_sqrt0))*d00_atanh1-(WL2*d00_sqrt0)*Con4_Vvar_Nsat_GND*d10_atanh1)/d00_atanh1/d00_atanh1);
1204 : 0 : Neff_Vvar_Mucinv_GND=((((WL2_Vvar_Mucinv_GND*d00_sqrt0)+(WL2*Con3_Vvar_Mucinv_GND*d10_sqrt0))*d00_atanh1-(WL2*d00_sqrt0)*Con4_Vvar_Mucinv_GND*d10_atanh1)/d00_atanh1/d00_atanh1);
1205 : 0 : Neff_Vvar_Ql_GND=(((WL2*Con3_Vvar_Ql_GND*d10_sqrt0)*d00_atanh1-(WL2*d00_sqrt0)*Con4_Vvar_Ql_GND*d10_atanh1)/d00_atanh1/d00_atanh1);
1206 : : #endif
1207 : 0 : Neff=((WL2*d00_sqrt0)/d00_atanh1);
1208 : : }
1209 : : }
1210 : : else
1211 : : {
1212 : : #if defined(_DERIVATE)
1213 : 0 : Neff_Vb_E=0.0;
1214 : 0 : Neff_Vvar_Nsat_GND=0.0;
1215 : 0 : Neff_Vvar_Mucinv_GND=0.0;
1216 : 0 : Neff_Vvar_Ql_GND=0.0;
1217 : : #endif
1218 : 0 : Neff=0;
1219 : : }
1220 [ # # ]: 0 : if
1221 : : (Ql<0)
1222 : : {
1223 : : #if defined(_DERIVATE)
1224 : 0 : Rb_Vvar_Ql_GND=0.0;
1225 : 0 : Rb_Vb_E=(W_Vb_E/(((1.602176462e-19*Munc)*A)*Nl));
1226 : 0 : Rb_Vvar_Nsat_GND=(W_Vvar_Nsat_GND/(((1.602176462e-19*Munc)*A)*Nl));
1227 : 0 : Rb_Vvar_Mucinv_GND=(-W*(1.602176462e-19*Munc_Vvar_Mucinv_GND)*A*Nl/(((1.602176462e-19*Munc)*A)*Nl)/(((1.602176462e-19*Munc)*A)*Nl));
1228 : : #endif
1229 : 0 : Rb=(W/(((1.602176462e-19*Munc)*A)*Nl));
1230 : : }
1231 : : else
1232 : : {
1233 : : #if defined(_DERIVATE)
1234 : 0 : Rb_Vvar_Ql_GND=(-W*(((1.602176462e-19*Mueff_Vvar_Ql_GND)*A*Neff)+(((1.602176462e-19*Mueff)*A)*Neff_Vvar_Ql_GND))/(((1.602176462e-19*Mueff)*A)*Neff)/(((1.602176462e-19*Mueff)*A)*Neff));
1235 : 0 : Rb_Vb_E=((W_Vb_E*(((1.602176462e-19*Mueff)*A)*Neff)-W*(((1.602176462e-19*Mueff_Vb_E)*A*Neff)+(((1.602176462e-19*Mueff)*A)*Neff_Vb_E)))/(((1.602176462e-19*Mueff)*A)*Neff)/(((1.602176462e-19*Mueff)*A)*Neff));
1236 : 0 : Rb_Vvar_Nsat_GND=((W_Vvar_Nsat_GND*(((1.602176462e-19*Mueff)*A)*Neff)-W*(((1.602176462e-19*Mueff_Vvar_Nsat_GND)*A*Neff)+(((1.602176462e-19*Mueff)*A)*Neff_Vvar_Nsat_GND)))/(((1.602176462e-19*Mueff)*A)*Neff)/(((1.602176462e-19*Mueff)*A)*Neff));
1237 : 0 : Rb_Vvar_Mucinv_GND=(-W*(((1.602176462e-19*Mueff_Vvar_Mucinv_GND)*A*Neff)+(((1.602176462e-19*Mueff)*A)*Neff_Vvar_Mucinv_GND))/(((1.602176462e-19*Mueff)*A)*Neff)/(((1.602176462e-19*Mueff)*A)*Neff));
1238 : : #endif
1239 : 0 : Rb=(W/(((1.602176462e-19*Mueff)*A)*Neff));
1240 : : }
1241 : : #if defined(_DYNAMIC)
1242 : 0 : Vebj=(0.6-(((Ql-Qbi)*(Ql-Qbi))/(((((2*1.602176462e-19)*Nl)*1.03594e-10)*A)*A)));
1243 : : #endif
1244 : : #if defined(_DYNAMIC)
1245 : : {
1246 : 0 : double m00_logE(d00_logE0,((((Plo/Ni)/Ni)+(1/Nl))*(Nl+Plo)))
1247 : 0 : double m00_logE(d00_logE1,((Plo+Nl)/Nl))
1248 : : #if defined(_DERIVATE)
1249 : 0 : double m10_logE(d10_logE0,d00_logE0,((((Plo/Ni)/Ni)+(1/Nl))*(Nl+Plo)))
1250 : 0 : double m10_logE(d10_logE1,d00_logE1,((Plo+Nl)/Nl))
1251 : : #endif
1252 : 0 : Vebd=((m00_vt(Tj)*d00_logE0)-((Dc/Munc)*d00_logE1));
1253 : : }
1254 : : #endif
1255 : : #ifdef _DYNAMIC
1256 [ # # ]: 0 : if
1257 : : (Ql<0)
1258 : : {
1259 : : #if defined(_DYNAMIC)
1260 : 0 : Vebq=Vebj;
1261 : : #endif
1262 : : }
1263 : : else
1264 : : {
1265 : : #ifdef _DYNAMIC
1266 [ # # ]: 0 : if
1267 : : (Ql>=Qbi)
1268 : : {
1269 : : #if defined(_DYNAMIC)
1270 : 0 : Vebq=Vebd;
1271 : : #endif
1272 : : }
1273 : : else
1274 : : {
1275 : : #if defined(_DYNAMIC)
1276 : : {
1277 [ # # ]: 0 : double m00_min(d00_min0,Vebj,Vebd)
1278 : : #if defined(_DERIVATE)
1279 [ # # ]: 0 : double m10_min(d10_min0,d00_min0,Vebj,Vebd)
1280 [ # # ]: 0 : double m11_min(d11_min0,d00_min0,Vebj,Vebd)
1281 : : #endif
1282 : 0 : Vebq=d00_min0;
1283 : : }
1284 : : #endif
1285 : : }
1286 : : #endif /* if (...) */
1287 : : }
1288 : : #endif /* if (...) */
1289 : : {
1290 : 0 : double m00_pow(d00_pow0,Nscl,0.75)
1291 : : #if defined(_DERIVATE)
1292 [ # # ]: 0 : double m10_pow(d10_pow0,d00_pow0,Nscl,0.75)
1293 : : #endif
1294 : : #if defined(_DERIVATE)
1295 : 0 : BVcbo_Vvar_Nsat_GND=(-(BVf*5.34e13)*(d10_pow0*Nscl_Vvar_Nsat_GND)/d00_pow0/d00_pow0);
1296 : : #endif
1297 : 0 : BVcbo=((BVf*5.34e13)/d00_pow0);
1298 : : }
1299 : : #if defined(_DERIVATE)
1300 : 0 : Vnrt_Vb_E=Vbc_Vb_E;
1301 : : #endif
1302 : 0 : Vnrt=Vbc;
1303 : : {
1304 : 0 : double m00_pow(d00_pow0,(Vnrt/BVcbo),BVn)
1305 : : #if defined(_DERIVATE)
1306 [ # # ]: 0 : double m10_pow(d10_pow0,d00_pow0,(Vnrt/BVcbo),BVn)
1307 : : #endif
1308 : : #if defined(_DERIVATE)
1309 : 0 : M_Vb_E=(-1*(-(d10_pow0*(Vnrt_Vb_E/BVcbo)))/(1-d00_pow0)/(1-d00_pow0));
1310 : 0 : M_Vvar_Nsat_GND=(-1*(-(d10_pow0*(-Vnrt*BVcbo_Vvar_Nsat_GND/BVcbo/BVcbo)))/(1-d00_pow0)/(1-d00_pow0));
1311 : : #endif
1312 : 0 : M=(1/(1-d00_pow0));
1313 : : }
1314 [ # # ]: 0 : if
1315 : : (Rb>0)
1316 : : {
1317 : : #if defined(_DERIVATE)
1318 : 0 : It_VC_e=(Vae_VC_e/Rb);
1319 : 0 : It_Vvar_Ql_GND=(-Vae*Rb_Vvar_Ql_GND/Rb/Rb);
1320 : 0 : It_Vb_E=(-Vae*Rb_Vb_E/Rb/Rb);
1321 : 0 : It_Vvar_Nsat_GND=(-Vae*Rb_Vvar_Nsat_GND/Rb/Rb);
1322 : 0 : It_Vvar_Mucinv_GND=(-Vae*Rb_Vvar_Mucinv_GND/Rb/Rb);
1323 : : #endif
1324 : 0 : It=(Vae/Rb);
1325 : : }
1326 : : else
1327 : : {
1328 : : #if defined(_DERIVATE)
1329 : 0 : It_VC_e=(Vae_VC_e/1e-6);
1330 : 0 : It_Vvar_Ql_GND=0.0;
1331 : 0 : It_Vb_E=0.0;
1332 : 0 : It_Vvar_Nsat_GND=0.0;
1333 : 0 : It_Vvar_Mucinv_GND=0.0;
1334 : : #endif
1335 : 0 : It=(Vae/1e-6);
1336 : : }
1337 [ # # ]: 0 : if
1338 : : (Veb>0)
1339 : : {
1340 : : #if defined(_DERIVATE)
1341 : 0 : Icss_VC_e=((1/(1+B))*It_VC_e);
1342 : 0 : Icss_Vvar_Ql_GND=(((1/(1+B))*It_Vvar_Ql_GND)+(((B/(1+B))*((4*Dp)/((W*W)+1e-20)))*Ql_Vvar_Ql_GND));
1343 : 0 : Icss_Vb_E=(((1/(1+B))*It_Vb_E)+((B/(1+B))*(-(4*Dp)*((W_Vb_E*W)+(W*W_Vb_E))/((W*W)+1e-20)/((W*W)+1e-20)))*Ql);
1344 : 0 : Icss_Vvar_Nsat_GND=(((1/(1+B))*It_Vvar_Nsat_GND)+((B/(1+B))*(-(4*Dp)*((W_Vvar_Nsat_GND*W)+(W*W_Vvar_Nsat_GND))/((W*W)+1e-20)/((W*W)+1e-20)))*Ql);
1345 : 0 : Icss_Vvar_Mucinv_GND=((1/(1+B))*It_Vvar_Mucinv_GND);
1346 : : #endif
1347 : 0 : Icss=(((1/(1+B))*It)+(((B/(1+B))*((4*Dp)/((W*W)+1e-20)))*Ql));
1348 : : }
1349 : : else
1350 : : {
1351 : : #if defined(_DERIVATE)
1352 : 0 : Icss_VC_e=0.0;
1353 : 0 : Icss_Vvar_Ql_GND=0.0;
1354 : 0 : Icss_Vb_E=0.0;
1355 : 0 : Icss_Vvar_Nsat_GND=0.0;
1356 : 0 : Icss_Vvar_Mucinv_GND=0.0;
1357 : : #endif
1358 : 0 : Icss=0;
1359 : : }
1360 : : #if defined(_DERIVATE)
1361 : 0 : Ic_VC_e=Icss_VC_e;
1362 : 0 : Ic_Vvar_Ql_GND=(Icss_Vvar_Ql_GND+Ccer_Vvar_Ql_GND*dVecdt);
1363 : 0 : Ic_Vb_E=(Icss_Vb_E+Ccer_Vb_E*dVecdt);
1364 : 0 : Ic_Vvar_Nsat_GND=(Icss_Vvar_Nsat_GND+Ccer_Vvar_Nsat_GND*dVecdt);
1365 : 0 : Ic_Vvar_Mucinv_GND=Icss_Vvar_Mucinv_GND;
1366 : 0 : Ic_Vvar_dVecdt_GND=(Ccer*dVecdt_Vvar_dVecdt_GND);
1367 : : #endif
1368 : 0 : Ic=(Icss+(Ccer*dVecdt));
1369 [ # # ]: 0 : if
1370 : : (Veb>0)
1371 : : {
1372 [ # # ]: 0 : if
1373 : : (Qb>0)
1374 : : {
1375 : : #if defined(_DERIVATE)
1376 : 0 : Ibss_Vvar_Ql_GND=((Ql_Vvar_Ql_GND/Tau)+((((((Ql_Vvar_Ql_GND*Ql)+(Ql*Ql_Vvar_Ql_GND))/Qb)/Qb)*4*Nscl*Nscl/Ni)/Ni)*Isne);
1377 : 0 : Ibss_Vb_E=(((((-(Ql*Ql)*Qb_Vb_E/Qb/Qb)*Qb-((Ql*Ql)/Qb)*Qb_Vb_E)/Qb/Qb)*4*Nscl*Nscl/Ni)/Ni)*Isne;
1378 : 0 : Ibss_Vvar_Nsat_GND=(((((((((-(Ql*Ql)*Qb_Vvar_Nsat_GND/Qb/Qb)*Qb-((Ql*Ql)/Qb)*Qb_Vvar_Nsat_GND)/Qb/Qb)*4*Nscl)+(((((Ql*Ql)/Qb)/Qb)*4)*Nscl_Vvar_Nsat_GND))*Nscl)+((((((Ql*Ql)/Qb)/Qb)*4)*Nscl)*Nscl_Vvar_Nsat_GND))/Ni)/Ni)*Isne;
1379 : : #endif
1380 : 0 : Ibss=((Ql/Tau)+(((((((((Ql*Ql)/Qb)/Qb)*4)*Nscl)*Nscl)/Ni)/Ni)*Isne));
1381 : : }
1382 : : else
1383 : : {
1384 : : #if defined(_DERIVATE)
1385 : 0 : Ibss_Vvar_Ql_GND=(Ql_Vvar_Ql_GND/Tau);
1386 : 0 : Ibss_Vb_E=0.0;
1387 : 0 : Ibss_Vvar_Nsat_GND=0.0;
1388 : : #endif
1389 : 0 : Ibss=(Ql/Tau);
1390 : : }
1391 : : }
1392 : : else
1393 : : {
1394 : : #if defined(_DERIVATE)
1395 : 0 : Ibss_Vvar_Ql_GND=0.0;
1396 : 0 : Ibss_Vb_E=0.0;
1397 : 0 : Ibss_Vvar_Nsat_GND=0.0;
1398 : : #endif
1399 : 0 : Ibss=0;
1400 : : }
1401 [ # # ]: 0 : if
1402 : : (Vgs<Vt)
1403 : : {
1404 : : #if defined(_DERIVATE)
1405 : 0 : Imos_Vb_E=0.0;
1406 : 0 : Imos_VG_E=0.0;
1407 : : #endif
1408 : 0 : Imos=0;
1409 : : }
1410 : : else
1411 : : {
1412 [ # # ]: 0 : if
1413 : : (Vds>(Vth/Kf))
1414 : : {
1415 : : #if defined(_DERIVATE)
1416 : 0 : Imos_Vb_E=0.0;
1417 : 0 : Imos_VG_E=((((((KpT*Vth_VG_E)*Vth)+((KpT*Vth)*Vth_VG_E))/2)*(1+(Theta*Vth))-(((KpT*Vth)*Vth)/2)*(Theta*Vth_VG_E))/(1+(Theta*Vth))/(1+(Theta*Vth)));
1418 : : #endif
1419 : 0 : Imos=((((KpT*Vth)*Vth)/2)/(1+(Theta*Vth)));
1420 : : }
1421 : : else
1422 : : {
1423 : : #if defined(_DERIVATE)
1424 : 0 : Imos_Vb_E=(((Kf*KpT)*((Vth*Vds_Vb_E)-((((Kf*Vds_Vb_E)*Vds)+((Kf*Vds)*Vds_Vb_E))/2)))/(1+(Theta*Vth)));
1425 : 0 : Imos_VG_E=((((Kf*KpT)*Vth_VG_E*Vds)*(1+(Theta*Vth))-((Kf*KpT)*((Vth*Vds)-(((Kf*Vds)*Vds)/2)))*(Theta*Vth_VG_E))/(1+(Theta*Vth))/(1+(Theta*Vth)));
1426 : : #endif
1427 : 0 : Imos=(((Kf*KpT)*((Vth*Vds)-(((Kf*Vds)*Vds)/2)))/(1+(Theta*Vth)));
1428 : : }
1429 : : }
1430 [ # # ]: 0 : if
1431 : : (Vbc>0)
1432 : : {
1433 : : {
1434 : 0 : double m00_sqrt(d00_sqrt0,((((2*1.03594e-10)*Vbc)/1.602176462e-19)/Nscl))
1435 : : #if defined(_DERIVATE)
1436 : 0 : double m10_sqrt(d10_sqrt0,d00_sqrt0,((((2*1.03594e-10)*Vbc)/1.602176462e-19)/Nscl))
1437 : : #endif
1438 : : #if defined(_DERIVATE)
1439 : 0 : Igen_Vb_E=((((1.602176462e-19*Ni)*A)*((((2*1.03594e-10)*Vbc_Vb_E)/1.602176462e-19)/Nscl)*d10_sqrt0)/Tau);
1440 : 0 : Igen_Vvar_Nsat_GND=((((1.602176462e-19*Ni)*A)*(-(((2*1.03594e-10)*Vbc)/1.602176462e-19)*Nscl_Vvar_Nsat_GND/Nscl/Nscl)*d10_sqrt0)/Tau);
1441 : : #endif
1442 : 0 : Igen=((((1.602176462e-19*Ni)*A)*d00_sqrt0)/Tau);
1443 : : }
1444 : : }
1445 : : else
1446 : : {
1447 : : #if defined(_DERIVATE)
1448 : 0 : Igen_Vb_E=0.0;
1449 : 0 : Igen_Vvar_Nsat_GND=0.0;
1450 : : #endif
1451 : 0 : Igen=0;
1452 : : }
1453 : : #if defined(_DERIVATE)
1454 : 0 : Imult_Vb_E=(((M_Vb_E*(Imos+Ic))+((M-1)*(Imos_Vb_E+Ic_Vb_E)))+((M_Vb_E*Igen)+(M*Igen_Vb_E)));
1455 : 0 : Imult_Vvar_Nsat_GND=(((M_Vvar_Nsat_GND*(Imos+Ic))+((M-1)*Ic_Vvar_Nsat_GND))+((M_Vvar_Nsat_GND*Igen)+(M*Igen_Vvar_Nsat_GND)));
1456 : 0 : Imult_VG_E=((M-1)*Imos_VG_E);
1457 : 0 : Imult_VC_e=((M-1)*Ic_VC_e);
1458 : 0 : Imult_Vvar_Ql_GND=((M-1)*Ic_Vvar_Ql_GND);
1459 : 0 : Imult_Vvar_Mucinv_GND=((M-1)*Ic_Vvar_Mucinv_GND);
1460 : 0 : Imult_Vvar_dVecdt_GND=((M-1)*Ic_Vvar_dVecdt_GND);
1461 : : #endif
1462 : 0 : Imult=(((M-1)*(Imos+Ic))+(M*Igen));
1463 : : #if defined(_DYNAMIC)
1464 : : #if defined(_DERIVATE)
1465 : 0 : Qgd_Vb_G=((Cgd_Vb_G*Vdg)+(Cgd*Vdg_Vb_G));
1466 : 0 : Qgd_Vvar_Nsat_GND=Cgd_Vvar_Nsat_GND*Vdg;
1467 : : #endif
1468 : 0 : Qgd=(Cgd*Vdg);
1469 : : #endif
1470 : : #if defined(_DYNAMIC)
1471 : : #if defined(_DERIVATE)
1472 : 0 : Qcer_Vvar_Ql_GND=Ccer_Vvar_Ql_GND*Vec;
1473 : 0 : Qcer_Vb_E=Ccer_Vb_E*Vec;
1474 : 0 : Qcer_Vvar_Nsat_GND=Ccer_Vvar_Nsat_GND*Vec;
1475 : 0 : Qcer_Ve_E=(Ccer*Vec_Ve_E);
1476 : : #endif
1477 : 0 : Qcer=(Ccer*Vec);
1478 : : #endif
1479 : : #if defined(_DYNAMIC)
1480 : : #if defined(_DERIVATE)
1481 : 0 : Qmult_Vb_E=((M_Vb_E*Qcer)+((M-1)*Qcer_Vb_E));
1482 : 0 : Qmult_Vvar_Nsat_GND=((M_Vvar_Nsat_GND*Qcer)+((M-1)*Qcer_Vvar_Nsat_GND));
1483 : 0 : Qmult_Vvar_Ql_GND=((M-1)*Qcer_Vvar_Ql_GND);
1484 : 0 : Qmult_Ve_E=((M-1)*Qcer_Ve_E);
1485 : : #endif
1486 : 0 : Qmult=((M-1)*Qcer);
1487 : : #endif
1488 [ # # ]: 0 : if
1489 : : (Deltap>0)
1490 : : {
1491 : : {
1492 : 0 : double m00_pow(d00_pow0,Deltap,(2.0/3.0))
1493 : 0 : double m00_logE(d00_logE1,(1+(Alpha2/d00_pow0)))
1494 : : #if defined(_DERIVATE)
1495 [ # # ]: 0 : double m10_pow(d10_pow0,d00_pow0,Deltap,(2.0/3.0))
1496 : 0 : double m10_logE(d10_logE1,d00_logE1,(1+(Alpha2/d00_pow0)))
1497 : : #endif
1498 : : #if defined(_DERIVATE)
1499 : 0 : iMucinv_Vvar_Ql_GND=(((Deltap_Vvar_Ql_GND*d00_logE1)+(Deltap*(-Alpha2*(d10_pow0*Deltap_Vvar_Ql_GND)/d00_pow0/d00_pow0)*d10_logE1))/Alpha1);
1500 : 0 : iMucinv_Vvar_Mucinv_GND=(((Deltap_Vvar_Mucinv_GND*d00_logE1)+(Deltap*(-Alpha2*(d10_pow0*Deltap_Vvar_Mucinv_GND)/d00_pow0/d00_pow0)*d10_logE1))/Alpha1);
1501 : 0 : iMucinv_Vb_E=(((Deltap_Vb_E*d00_logE1)+(Deltap*(-Alpha2*(d10_pow0*Deltap_Vb_E)/d00_pow0/d00_pow0)*d10_logE1))/Alpha1);
1502 : 0 : iMucinv_Vvar_Nsat_GND=(((Deltap_Vvar_Nsat_GND*d00_logE1)+(Deltap*(-Alpha2*(d10_pow0*Deltap_Vvar_Nsat_GND)/d00_pow0/d00_pow0)*d10_logE1))/Alpha1);
1503 : : #endif
1504 : 0 : iMucinv=((Deltap*d00_logE1)/Alpha1);
1505 : : }
1506 : : }
1507 : : else
1508 : : {
1509 : : #if defined(_DERIVATE)
1510 : 0 : iMucinv_Vvar_Ql_GND=0.0;
1511 : 0 : iMucinv_Vvar_Mucinv_GND=0.0;
1512 : 0 : iMucinv_Vb_E=0.0;
1513 : 0 : iMucinv_Vvar_Nsat_GND=0.0;
1514 : : #endif
1515 : 0 : iMucinv=0;
1516 : : }
1517 : : #if defined(_DERIVATE)
1518 : 0 : iQl_Vb_E=(((((1.602176462e-19*A)*W_Vb_E)*Plo)+(((1.602176462e-19*A)*W)*Plo_Vb_E))/2);
1519 : 0 : iQl_Vvar_Nsat_GND=(((((1.602176462e-19*A)*W_Vvar_Nsat_GND)*Plo)+(((1.602176462e-19*A)*W)*Plo_Vvar_Nsat_GND))/2);
1520 : 0 : iQl_Vvar_Ql_GND=((((1.602176462e-19*A)*W)*Plo_Vvar_Ql_GND)/2);
1521 : 0 : iQl_Vvar_Mucinv_GND=((((1.602176462e-19*A)*W)*Plo_Vvar_Mucinv_GND)/2);
1522 : : #endif
1523 : 0 : iQl=((((1.602176462e-19*A)*W)*Plo)/2);
1524 : : #if defined(_DERIVATE)
1525 : 0 : iNsat_VC_e=(Ic_VC_e/((1.602176462e-19*A)*Vpsat));
1526 : 0 : iNsat_Vvar_Ql_GND=(Ic_Vvar_Ql_GND/((1.602176462e-19*A)*Vpsat));
1527 : 0 : iNsat_Vb_E=((Ic_Vb_E/((1.602176462e-19*A)*Vpsat))-(Imos_Vb_E/((1.602176462e-19*A)*Vnsat)));
1528 : 0 : iNsat_Vvar_Nsat_GND=(Ic_Vvar_Nsat_GND/((1.602176462e-19*A)*Vpsat));
1529 : 0 : iNsat_Vvar_Mucinv_GND=(Ic_Vvar_Mucinv_GND/((1.602176462e-19*A)*Vpsat));
1530 : 0 : iNsat_Vvar_dVecdt_GND=(Ic_Vvar_dVecdt_GND/((1.602176462e-19*A)*Vpsat));
1531 : 0 : iNsat_VG_E=(-(Imos_VG_E/((1.602176462e-19*A)*Vnsat)));
1532 : : #endif
1533 : 0 : iNsat=((Ic/((1.602176462e-19*A)*Vpsat))-(Imos/((1.602176462e-19*A)*Vnsat)));
1534 : 0 : _load_static_residual2(G,E,(Vgs*1e-12));
1535 : : #if defined(_DERIVATE)
1536 [ # # ][ # # ]: 0 : _load_static_jacobian4(G,E,G,E,Vgs_VG_E*1e-12);
[ # # ][ # # ]
[ # # ]
1537 : : #endif
1538 : : #if defined(_DYNAMIC)
1539 [ # # ][ # # ]: 0 : _load_dynamic_residual2(G,E,_DDT(Qgs));
1540 : : #if defined(_DERIVATE)
1541 [ # # ][ # # ]: 0 : _load_dynamic_jacobian4(G,E,G,E,Qgs_VG_E);
[ # # ][ # # ]
[ # # ]
1542 : : #endif
1543 : : #endif
1544 : 0 : _load_static_residual2(b,G,(Vdg*1e-12));
1545 : : #if defined(_DERIVATE)
1546 [ # # ][ # # ]: 0 : _load_static_jacobian4(b,G,b,G,Vdg_Vb_G*1e-12);
[ # # ][ # # ]
[ # # ]
1547 : : #endif
1548 : : #if defined(_DYNAMIC)
1549 [ # # ][ # # ]: 0 : _load_dynamic_residual2(b,G,_DDT(Qgd));
1550 : : #if defined(_DERIVATE)
1551 [ # # ][ # # ]: 0 : _load_dynamic_jacobian2s(b,G,var_Nsat,Qgd_Vvar_Nsat_GND);
[ # # ]
1552 [ # # ][ # # ]: 0 : _load_dynamic_jacobian4(b,G,b,G,Qgd_Vb_G);
[ # # ][ # # ]
[ # # ]
1553 : : #endif
1554 : : #endif
1555 : 0 : _load_static_residual2(b,E,((Imos+Imult)+(Vds*1e-12)));
1556 : : #if defined(_DERIVATE)
1557 [ # # ]: 0 : _load_static_jacobian2s(b,E,var_dVecdt,Imult_Vvar_dVecdt_GND);
1558 [ # # ]: 0 : _load_static_jacobian2s(b,E,var_Mucinv,Imult_Vvar_Mucinv_GND);
1559 [ # # ]: 0 : _load_static_jacobian2s(b,E,var_Ql,Imult_Vvar_Ql_GND);
1560 [ # # ][ # # ]: 0 : _load_static_jacobian4(b,E,C,e,Imult_VC_e);
[ # # ][ # # ]
[ # # ]
1561 [ # # ]: 0 : _load_static_jacobian2s(b,E,var_Nsat,Imult_Vvar_Nsat_GND);
1562 [ # # ][ # # ]: 0 : _load_static_jacobian4(b,E,G,E,(Imos_VG_E+Imult_VG_E));
[ # # ][ # # ]
[ # # ]
1563 [ # # ][ # # ]: 0 : _load_static_jacobian4(b,E,b,E,((Imos_Vb_E+Imult_Vb_E)+Vds_Vb_E*1e-12));
[ # # ][ # # ]
[ # # ]
1564 : : #endif
1565 : : #if defined(_DYNAMIC)
1566 [ # # ][ # # ]: 0 : _load_dynamic_residual2(b,E,_DDT(Qds));
1567 : : #if defined(_DERIVATE)
1568 [ # # ][ # # ]: 0 : _load_dynamic_jacobian2s(b,E,var_Nsat,Qds_Vvar_Nsat_GND);
[ # # ]
1569 [ # # ][ # # ]: 0 : _load_dynamic_jacobian4(b,E,b,E,Qds_Vb_E);
[ # # ][ # # ]
[ # # ]
1570 : : #endif
1571 : : #endif
1572 : : #if defined(_DYNAMIC)
1573 [ # # ][ # # ]: 0 : _load_dynamic_residual2(b,E,_DDT(Qmult));
1574 : : #if defined(_DERIVATE)
1575 [ # # ][ # # ]: 0 : _load_dynamic_jacobian4(b,E,e,E,Qmult_Ve_E);
[ # # ][ # # ]
[ # # ]
1576 [ # # ][ # # ]: 0 : _load_dynamic_jacobian2s(b,E,var_Ql,Qmult_Vvar_Ql_GND);
[ # # ]
1577 [ # # ][ # # ]: 0 : _load_dynamic_jacobian2s(b,E,var_Nsat,Qmult_Vvar_Nsat_GND);
[ # # ]
1578 [ # # ][ # # ]: 0 : _load_dynamic_jacobian4(b,E,b,E,Qmult_Vb_E);
[ # # ][ # # ]
[ # # ]
1579 : : #endif
1580 : : #endif
1581 : 0 : _load_static_residual2(e,E,(Icss+(Vec*1e-12)));
1582 : : #if defined(_DERIVATE)
1583 [ # # ][ # # ]: 0 : _load_static_jacobian4(e,E,e,E,Vec_Ve_E*1e-12);
[ # # ][ # # ]
[ # # ]
1584 [ # # ]: 0 : _load_static_jacobian2s(e,E,var_Mucinv,Icss_Vvar_Mucinv_GND);
1585 [ # # ]: 0 : _load_static_jacobian2s(e,E,var_Nsat,Icss_Vvar_Nsat_GND);
1586 [ # # ][ # # ]: 0 : _load_static_jacobian4(e,E,b,E,Icss_Vb_E);
[ # # ][ # # ]
[ # # ]
1587 [ # # ]: 0 : _load_static_jacobian2s(e,E,var_Ql,Icss_Vvar_Ql_GND);
1588 [ # # ][ # # ]: 0 : _load_static_jacobian4(e,E,C,e,Icss_VC_e);
[ # # ][ # # ]
[ # # ]
1589 : : #endif
1590 : : #if defined(_DYNAMIC)
1591 [ # # ][ # # ]: 0 : _load_dynamic_residual2(e,E,_DDT(Qcer));
1592 : : #if defined(_DERIVATE)
1593 [ # # ][ # # ]: 0 : _load_dynamic_jacobian4(e,E,e,E,Qcer_Ve_E);
[ # # ][ # # ]
[ # # ]
1594 [ # # ][ # # ]: 0 : _load_dynamic_jacobian2s(e,E,var_Nsat,Qcer_Vvar_Nsat_GND);
[ # # ]
1595 [ # # ][ # # ]: 0 : _load_dynamic_jacobian4(e,E,b,E,Qcer_Vb_E);
[ # # ][ # # ]
[ # # ]
1596 [ # # ][ # # ]: 0 : _load_dynamic_jacobian2s(e,E,var_Ql,Qcer_Vvar_Ql_GND);
[ # # ]
1597 : : #endif
1598 : : #endif
1599 : 0 : _load_static_residual2(e,b,(Ibss+(Veb*1e-12)));
1600 : : #if defined(_DERIVATE)
1601 [ # # ][ # # ]: 0 : _load_static_jacobian4(e,b,e,b,Veb_Ve_b*1e-12);
[ # # ][ # # ]
[ # # ]
1602 [ # # ]: 0 : _load_static_jacobian2s(e,b,var_Nsat,Ibss_Vvar_Nsat_GND);
1603 [ # # ][ # # ]: 0 : _load_static_jacobian4(e,b,b,E,Ibss_Vb_E);
[ # # ][ # # ]
[ # # ]
1604 [ # # ]: 0 : _load_static_jacobian2s(e,b,var_Ql,Ibss_Vvar_Ql_GND);
1605 : : #endif
1606 : : #if defined(_DYNAMIC)
1607 [ # # ][ # # ]: 0 : _load_dynamic_residual2(e,b,_DDT(iQl));
1608 : : #if defined(_DERIVATE)
1609 [ # # ][ # # ]: 0 : _load_dynamic_jacobian2s(e,b,var_Mucinv,iQl_Vvar_Mucinv_GND);
[ # # ]
1610 [ # # ][ # # ]: 0 : _load_dynamic_jacobian2s(e,b,var_Ql,iQl_Vvar_Ql_GND);
[ # # ]
1611 [ # # ][ # # ]: 0 : _load_dynamic_jacobian2s(e,b,var_Nsat,iQl_Vvar_Nsat_GND);
[ # # ]
1612 [ # # ][ # # ]: 0 : _load_dynamic_jacobian4(e,b,b,E,iQl_Vb_E);
[ # # ][ # # ]
[ # # ]
1613 : : #endif
1614 : : #endif
1615 : 0 : _load_static_residual2(C,e,It);
1616 : : #if defined(_DERIVATE)
1617 [ # # ]: 0 : _load_static_jacobian2s(C,e,var_Mucinv,It_Vvar_Mucinv_GND);
1618 [ # # ]: 0 : _load_static_jacobian2s(C,e,var_Nsat,It_Vvar_Nsat_GND);
1619 [ # # ][ # # ]: 0 : _load_static_jacobian4(C,e,b,E,It_Vb_E);
[ # # ][ # # ]
[ # # ]
1620 [ # # ]: 0 : _load_static_jacobian2s(C,e,var_Ql,It_Vvar_Ql_GND);
1621 [ # # ][ # # ]: 0 : _load_static_jacobian4(C,e,C,e,It_VC_e);
[ # # ][ # # ]
[ # # ]
1622 : : #endif
1623 : 0 : _load_static_residual1(var_Ql,(Ql-iQl));
1624 : : #if defined(_DERIVATE)
1625 [ # # ]: 0 : _load_static_jacobian1(var_Ql,var_Mucinv,(-iQl_Vvar_Mucinv_GND));
1626 [ # # ]: 0 : _load_static_jacobian1(var_Ql,var_Nsat,(-iQl_Vvar_Nsat_GND));
1627 [ # # ][ # # ]: 0 : _load_static_jacobian2p(var_Ql,b,E,(-iQl_Vb_E));
[ # # ]
1628 [ # # ]: 0 : _load_static_jacobian1(var_Ql,var_Ql,(Ql_Vvar_Ql_GND-iQl_Vvar_Ql_GND));
1629 : : #endif
1630 : 0 : _load_static_residual1(var_Mucinv,(Mucinv-iMucinv));
1631 : : #if defined(_DERIVATE)
1632 [ # # ]: 0 : _load_static_jacobian1(var_Mucinv,var_Nsat,(-iMucinv_Vvar_Nsat_GND));
1633 [ # # ][ # # ]: 0 : _load_static_jacobian2p(var_Mucinv,b,E,(-iMucinv_Vb_E));
[ # # ]
1634 [ # # ]: 0 : _load_static_jacobian1(var_Mucinv,var_Ql,(-iMucinv_Vvar_Ql_GND));
1635 [ # # ]: 0 : _load_static_jacobian1(var_Mucinv,var_Mucinv,(Mucinv_Vvar_Mucinv_GND-iMucinv_Vvar_Mucinv_GND));
1636 : : #endif
1637 : 0 : _load_static_residual1(var_Nsat,(Nsat-iNsat));
1638 : : #if defined(_DERIVATE)
1639 [ # # ][ # # ]: 0 : _load_static_jacobian2p(var_Nsat,G,E,(-iNsat_VG_E));
[ # # ]
1640 [ # # ]: 0 : _load_static_jacobian1(var_Nsat,var_dVecdt,(-iNsat_Vvar_dVecdt_GND));
1641 [ # # ]: 0 : _load_static_jacobian1(var_Nsat,var_Mucinv,(-iNsat_Vvar_Mucinv_GND));
1642 [ # # ][ # # ]: 0 : _load_static_jacobian2p(var_Nsat,b,E,(-iNsat_Vb_E));
[ # # ]
1643 [ # # ]: 0 : _load_static_jacobian1(var_Nsat,var_Ql,(-iNsat_Vvar_Ql_GND));
1644 [ # # ][ # # ]: 0 : _load_static_jacobian2p(var_Nsat,C,e,(-iNsat_VC_e));
[ # # ]
1645 [ # # ]: 0 : _load_static_jacobian1(var_Nsat,var_Nsat,(Nsat_Vvar_Nsat_GND-iNsat_Vvar_Nsat_GND));
1646 : : #endif
1647 : 0 : _load_static_residual1(var_dVecdt,dVecdt);
1648 : : #if defined(_DERIVATE)
1649 [ # # ]: 0 : _load_static_jacobian1(var_dVecdt,var_dVecdt,dVecdt_Vvar_dVecdt_GND);
1650 : : #endif
1651 : : #if defined(_DYNAMIC)
1652 [ # # ][ # # ]: 0 : _load_dynamic_residual1(var_dVecdt,(-_DDT(Vec)));
1653 : : #if defined(_DERIVATE)
1654 [ # # ][ # # ]: 0 : _load_dynamic_jacobian2p(var_dVecdt,e,E,(-Vec_Ve_E));
[ # # ][ # # ]
1655 : : #endif
1656 : : #endif
1657 : :
1658 : : /* ------------------ end of verilog analog equations --------------------- */
1659 : :
1660 : : /* ------------------ evaluate verilog noise equations -------------------- */
1661 : :
1662 : : /* ------------------- end of verilog noise equations --------------------- */
1663 : 0 : }
1664 : :
1665 : : /* Perform DC iteration. */
1666 : 0 : void nigbt::calcDC (void)
1667 : : {
1668 : : // evaluate Verilog code
1669 : 0 : initVerilog ();
1670 : 0 : calcVerilog ();
1671 : :
1672 : : // fill right hand side and static jacobian
1673 [ # # ]: 0 : for (int i1 = 0; i1 < 9; i1++) {
1674 [ # # ]: 0 : setI (i1, _rhs[i1]);
1675 [ # # ]: 0 : for (int i2 = 0; i2 < 9; i2++) {
1676 [ # # ]: 0 : setY (i1, i2, _jstat[i1][i2]);
1677 : : }
1678 : : }
1679 : 0 : }
1680 : :
1681 : : /* Save operating points. */
1682 : 0 : void nigbt::saveOperatingPoints (void)
1683 : : {
1684 : : // save global instance operating points
1685 : 0 : }
1686 : :
1687 : : /* Load operating points. */
1688 : 0 : void nigbt::loadOperatingPoints (void)
1689 : : {
1690 : 0 : }
1691 : :
1692 : : /* Calculate operating points. */
1693 : 0 : void nigbt::calcOperatingPoints (void)
1694 : : {
1695 : 0 : }
1696 : :
1697 : : /* Initialization of AC analysis. */
1698 : 0 : void nigbt::initAC (void)
1699 : : {
1700 : 0 : allocMatrixMNA ();
1701 : 0 : }
1702 : :
1703 : : /* Perform AC calculations. */
1704 : 0 : void nigbt::calcAC (nr_double_t frequency)
1705 : : {
1706 [ # # ]: 0 : setMatrixY (calcMatrixY (frequency));
1707 : 0 : }
1708 : :
1709 : : /* Compute Y-matrix for AC analysis. */
1710 : 0 : matrix nigbt::calcMatrixY (nr_double_t frequency)
1711 : : {
1712 : 0 : _freq = frequency;
1713 : 0 : saveOperatingPoints ();
1714 : 0 : matrix y (9);
1715 : :
1716 [ # # ]: 0 : for (int i1 = 0; i1 < 9; i1++) {
1717 [ # # ]: 0 : for (int i2 = 0; i2 < 9; i2++) {
1718 : 0 : y (i1,i2) = nr_complex_t (_jstat[i1][i2], _jdyna[i1][i2] * 2 * M_PI * _freq);
1719 : : }
1720 : : }
1721 : :
1722 : 0 : return y;
1723 : : }
1724 : :
1725 : : /* Initialization of S-parameter analysis. */
1726 : 0 : void nigbt::initSP (void)
1727 : : {
1728 : 0 : allocMatrixS ();
1729 : 0 : }
1730 : :
1731 : : /* Perform S-parameter calculations. */
1732 : 0 : void nigbt::calcSP (nr_double_t frequency)
1733 : : {
1734 [ # # ][ # # ]: 0 : setMatrixS (ytos (calcMatrixY (frequency)));
[ # # ][ # # ]
[ # # ]
1735 : 0 : }
1736 : :
1737 : : /* Initialization of transient analysis. */
1738 : 0 : void nigbt::initTR (void)
1739 : : {
1740 : 0 : setStates (2 * 9 * 9);
1741 : 0 : initDC ();
1742 : 0 : }
1743 : :
1744 : : /* Perform transient analysis iteration step. */
1745 : 0 : void nigbt::calcTR (nr_double_t)
1746 : : {
1747 : 0 : doHB = 0;
1748 : 0 : doAC = 1;
1749 : 0 : doTR = 1;
1750 : 0 : calcDC ();
1751 : :
1752 : : int i1, i2, i3, i4, state;
1753 : :
1754 : : // 2-node charge integrations
1755 [ # # ]: 0 : for (i1 = 0; i1 < 9; i1++) {
1756 [ # # ]: 0 : for (i2 = 0; i2 < 9; i2++) {
1757 : 0 : state = 2 * (i2 + 9 * i1);
1758 [ # # ]: 0 : if (i1 != i2)
1759 [ # # ]: 0 : if (_charges[i1][i2] != 0.0)
1760 : 0 : transientCapacitanceQ (state, i1, i2, _charges[i1][i2]);
1761 : : } }
1762 : :
1763 : : // 1-node charge integrations
1764 [ # # ]: 0 : for (i1 = 0; i1 < 9; i1++) {
1765 : 0 : state = 2 * (i1 + 9 * i1);
1766 [ # # ]: 0 : if (_charges[i1][i1] != 0.0)
1767 : 0 : transientCapacitanceQ (state, i1, _charges[i1][i1]);
1768 : : }
1769 : :
1770 : : // charge: 2-node, voltage: 2-node
1771 [ # # ]: 0 : for (i1 = 0; i1 < 9; i1++) {
1772 [ # # ]: 0 : for (i2 = 0; i2 < 9; i2++) {
1773 [ # # ]: 0 : if (i1 != i2)
1774 [ # # ]: 0 : for (i3 = 0; i3 < 9; i3++) {
1775 [ # # ]: 0 : for (i4 = 0; i4 < 9; i4++) {
1776 [ # # ]: 0 : if (i3 != i4)
1777 [ # # ]: 0 : if (_caps[i1][i2][i3][i4] != 0.0)
1778 [ # # ][ # # ]: 0 : transientCapacitanceC (i1, i2, i3, i4, _caps[i1][i2][i3][i4], BP(i3,i4));
1779 : : } } } }
1780 : :
1781 : : // charge: 2-node, voltage: 1-node
1782 [ # # ]: 0 : for (i1 = 0; i1 < 9; i1++) {
1783 [ # # ]: 0 : for (i2 = 0; i2 < 9; i2++) {
1784 [ # # ]: 0 : if (i1 != i2)
1785 [ # # ]: 0 : for (i3 = 0; i3 < 9; i3++) {
1786 [ # # ]: 0 : if (_caps[i1][i2][i3][i3] != 0.0)
1787 [ # # ]: 0 : transientCapacitanceC2Q (i1, i2, i3, _caps[i1][i2][i3][i3], NP(i3));
1788 : : } } }
1789 : :
1790 : : // charge: 1-node, voltage: 2-node
1791 [ # # ]: 0 : for (i1 = 0; i1 < 9; i1++) {
1792 [ # # ]: 0 : for (i3 = 0; i3 < 9; i3++) {
1793 [ # # ]: 0 : for (i4 = 0; i4 < 9; i4++) {
1794 [ # # ]: 0 : if (i3 != i4)
1795 [ # # ]: 0 : if (_caps[i1][i1][i3][i4] != 0.0)
1796 [ # # ][ # # ]: 0 : transientCapacitanceC2V (i1, i3, i4, _caps[i1][i1][i3][i4], BP(i3,i4));
1797 : : } } }
1798 : :
1799 : : // charge: 1-node, voltage: 1-node
1800 [ # # ]: 0 : for (i1 = 0; i1 < 9; i1++) {
1801 [ # # ]: 0 : for (i3 = 0; i3 < 9; i3++) {
1802 [ # # ]: 0 : if (_caps[i1][i1][i3][i3] != 0.0)
1803 [ # # ]: 0 : transientCapacitanceC (i1, i3, _caps[i1][i1][i3][i3], NP(i3));
1804 : : } }
1805 : 0 : }
1806 : :
1807 : : /* Compute Cy-matrix for AC noise analysis. */
1808 : 0 : matrix nigbt::calcMatrixCy (nr_double_t frequency)
1809 : : {
1810 : 0 : _freq = frequency;
1811 : 0 : matrix cy (9);
1812 : :
1813 : :
1814 : 0 : return cy;
1815 : : }
1816 : :
1817 : : /* Perform AC noise computations. */
1818 : 0 : void nigbt::calcNoiseAC (nr_double_t frequency)
1819 : : {
1820 [ # # ]: 0 : setMatrixN (calcMatrixCy (frequency));
1821 : 0 : }
1822 : :
1823 : : /* Perform S-parameter noise computations. */
1824 : 0 : void nigbt::calcNoiseSP (nr_double_t frequency)
1825 : : {
1826 [ # # ][ # # ]: 0 : setMatrixN (cytocs (calcMatrixCy (frequency) * z0, getMatrixS ()));
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
1827 : 0 : }
1828 : :
1829 : : /* Initialization of HB analysis. */
1830 : 0 : void nigbt::initHB (int)
1831 : : {
1832 : 0 : initDC ();
1833 : 0 : allocMatrixHB ();
1834 : 0 : }
1835 : :
1836 : : /* Perform HB analysis. */
1837 : 0 : void nigbt::calcHB (int)
1838 : : {
1839 : 0 : doHB = 1;
1840 : 0 : doAC = 1;
1841 : 0 : doTR = 0;
1842 : :
1843 : : // jacobian dI/dV and currents get filled
1844 : 0 : calcDC ();
1845 : 0 : saveOperatingPoints ();
1846 : :
1847 : : // fill in HB matrices
1848 [ # # ]: 0 : for (int i1 = 0; i1 < 9; i1++) {
1849 [ # # ]: 0 : setQ (i1, _qhs[i1]); // charges
1850 [ # # ]: 0 : setCV (i1, _chs[i1]); // jacobian dQ/dV * V
1851 [ # # ]: 0 : setGV (i1, _ghs[i1]); // jacobian dI/dV * V
1852 [ # # ]: 0 : for (int i2 = 0; i2 < 9; i2++) {
1853 [ # # ]: 0 : setQV (i1, i2, _jdyna[i1][i2]); // jacobian dQ/dV
1854 : : }
1855 : : }
1856 : 0 : }
1857 : :
1858 : : #include "nigbt.defs.h"
1859 : :
|