Branch data Line data Source code
1 : : /*
2 : : * HBT_X.analogfunction.cpp - analog function implementations
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 <stdio.h>
16 : : #include "HBT_X.analogfunction.h"
17 : : #include <cmath>
18 : :
19 : :
20 : : /* math functions and appropriate derivatives */
21 : : inline double _cos(double arg) { return cos(arg); }
22 : : inline double _d0_cos(double arg) { return (-sin(arg)); }
23 : : inline double _sin(double arg) { return sin(arg); }
24 : : inline double _d0_sin(double arg) { return (cos(arg)); }
25 : : inline double _tan(double arg) { return tan(arg); }
26 : : inline double _d0_tan(double arg) { return (1.0/cos(arg)/cos(arg)); }
27 : : inline double _cosh(double arg) { return cosh(arg); }
28 : : inline double _d0_cosh(double arg) { return (sinh(arg)); }
29 : : inline double _sinh(double arg) { return sinh(arg); }
30 : : inline double _d0_sinh(double arg) { return (cosh(arg)); }
31 : : inline double _tanh(double arg) { return tanh(arg); }
32 : : inline double _d0_tanh(double arg) { return (1.0/cosh(arg)/cosh(arg)); }
33 : : inline double _acos(double arg) { return acos(arg); }
34 : : inline double _d0_acos(double arg) { return (-1.0/sqrt(1-arg*arg)); }
35 : : inline double _asin(double arg) { return asin(arg); }
36 : : inline double _d0_asin(double arg) { return (+1.0/sqrt(1-arg*arg)); }
37 : : inline double _atan(double arg) { return atan(arg); }
38 : : inline double _d0_atan(double arg) { return (+1.0/(1+arg*arg)); }
39 : : inline double _acosh(double arg) { return acosh(arg); }
40 : : inline double _d0_acosh(double arg) { return (1.0/(sqrt(arg-1)*sqrt(arg+1))); }
41 : : inline double _asinh(double arg) { return asinh(arg); }
42 : : inline double _d0_asinh(double arg) { return (1.0/(sqrt(arg*arg+1))); }
43 : : inline double _atanh(double arg) { return atanh(arg); }
44 : : inline double _d0_atanh(double arg) { return (+1.0/(1-arg*arg)); }
45 : :
46 : 8000 : inline double _logE(double arg) { return log(arg); }
47 : 0 : inline double _d0_logE(double arg) { return (1.0/arg); }
48 : : inline double _log10(double arg) { return log10(arg); }
49 : : inline double _d0_log10(double arg) { return (1.0/arg/log(10.0)); }
50 : 0 : inline double _exp(double arg) { return exp(arg); }
51 : 0 : inline double _d0_exp(double arg) { return exp(arg); }
52 : 8000 : inline double _sqrt(double arg) { return sqrt(arg); }
53 : 0 : inline double _d0_sqrt(double arg) { return (1.0/sqrt(arg)/2.0); }
54 : :
55 : : inline double _abs(double arg) { return std::abs(arg); }
56 : : inline double _d0_abs(double arg) { return (((arg)>=0)?(+1.0):(-1.0)); }
57 : :
58 : : inline int _floor(double arg) { return floor(arg); }
59 : : inline int _d0_floor(double) { return (1.0); }
60 : :
61 : : inline int _ceil(double arg) { return ceil(arg); }
62 : :
63 : : inline double _hypot(double x,double y) { return sqrt((x)*(x)+(y)*(y)); }
64 : : inline double _d0_hypot(double x,double y) { return (x)/sqrt((x)*(x)+(y)*(y)); }
65 : : inline double _d1_hypot(double x,double y) { return (y)/sqrt((x)*(x)+(y)*(y)); }
66 : :
67 : : inline double _atan2(double x,double y) { return atan2(x,y); }
68 : : // TODO atan2 derivatives?
69 : :
70 : : inline double _max(double x,double y) { return ((x)>(y))?(x):(y); }
71 : : inline double _d0_max(double x,double y) { return ((x)>(y))?1.0:0.0; }
72 : : inline double _d1_max(double x,double y) { return ((x)>(y))?0.0:1.0; }
73 : :
74 : : inline double _min(double x,double y) { return ((x)<(y))?(x):(y); }
75 : : inline double _d0_min(double x,double y) { return ((x)<(y))?1.0:0.0; }
76 : : inline double _d1_min(double x,double y) { return ((x)<(y))?0.0:1.0; }
77 : :
78 : 0 : inline double _pow(double x,double y) { return pow(x,y); }
79 [ # # ]: 0 : inline double _d0_pow(double x,double y) { return (x==0.0)?0.0:((y/x)*pow(x,y)); }
80 [ # # ]: 0 : inline double _d1_pow(double x,double y) { return (x==0.0)?0.0:((log(x)/exp(0.0))*pow(x,y)); }
81 : :
82 : : inline double _limexp(double arg) { return ((arg)<(80))?(exp(arg)):(exp(80.0)*(1.0+(arg-80))); }
83 : : inline double _d0_limexp(double arg) { return ((arg)<(80))?(exp(arg)):(exp(80.0)); }
84 : :
85 : 0 : inline double _vt(double arg) { return 1.3806503e-23*arg/1.602176462e-19; }
86 : 0 : inline double _d0_vt(double) { return 1.3806503e-23/1.602176462e-19; }
87 : :
88 : :
89 : : /*
90 : : * analog function: exp_soft
91 : : */
92 : 0 : double HBT_X_exp_soft (double x)
93 : : {
94 : 0 : double exp_soft=0.0;
95 : 0 : double maxexp=0.0;
96 : 0 : double maxarg=0.0;
97 : 0 : {maxexp=1.0e25;
98 : 0 : maxarg=_logE(maxexp);
99 [ # # ]: 0 : if (x<maxarg)
100 : 0 : {exp_soft=_exp(x);
101 : : }else
102 : 0 : {exp_soft=(((x+1.0)-maxarg)*maxexp);
103 : : }}
104 : 0 : return exp_soft;
105 : : }
106 : 0 : double HBT_X_d_exp_soft (double x, double d_x)
107 : : {
108 : 0 : double exp_soft=0.0;
109 : 0 : double exp_soft_x=0.0;
110 : 0 : double maxexp=0.0;
111 : 0 : double maxexp_x=0.0;
112 : 0 : double maxarg=0.0;
113 : 0 : double maxarg_x=0.0;
114 : 0 : {{maxexp_x=0.0;
115 : 0 : maxexp=1.0e25;
116 : : }
117 : 0 : {maxarg_x=_d0_logE(maxexp)*(maxexp_x);
118 : 0 : maxarg=_logE(maxexp);
119 : : }
120 [ # # ]: 0 : if (x<maxarg)
121 : 0 : {{exp_soft_x=_d0_exp(x)*(1.0);
122 : 0 : exp_soft=_exp(x);
123 : : }
124 : : }else
125 : 0 : {{exp_soft_x=(((1.0-maxarg_x)*maxexp)+(((x+1.0)-maxarg)*maxexp_x));
126 : 0 : exp_soft=(((x+1.0)-maxarg)*maxexp);
127 : : }
128 : : }}
129 : 0 : return exp_soft_x*d_x;
130 : : }
131 : :
132 : : /*
133 : : * analog function: Vt
134 : : */
135 : 0 : double HBT_X_Vt (double U, double Ud)
136 : : {
137 : 0 : double Vt=0.0;
138 : 0 : double Vch=0.0;
139 : 0 : double VF=0.0;
140 : 0 : {Vch=(0.1*Ud);
141 : 0 : VF=(0.9*Ud);
142 [ # # ]: 0 : if (U<VF)
143 : 0 : Vt=(U-(Vch*_logE((1.0+_exp(((U-VF)/Vch))))));
144 : : else
145 : 0 : Vt=(VF-(Vch*_logE((1.0+_exp(((VF-U)/Vch))))));
146 : : }
147 : 0 : return Vt;
148 : : }
149 : 0 : double HBT_X_d_Vt (double U, double Ud, double d_U, double d_Ud)
150 : : {
151 : 0 : double Vt=0.0;
152 : 0 : double Vt_U=0.0;
153 : 0 : double Vt_Ud=0.0;
154 : 0 : double Vch=0.0;
155 : 0 : double Vch_U=0.0;
156 : 0 : double Vch_Ud=0.0;
157 : 0 : double VF=0.0;
158 : 0 : double VF_U=0.0;
159 : 0 : double VF_Ud=0.0;
160 : 0 : {{Vch_U=0.0;
161 : 0 : Vch_Ud=(0.1);
162 : 0 : Vch=(0.1*Ud);
163 : : }
164 : 0 : {VF_U=0.0;
165 : 0 : VF_Ud=(0.9);
166 : 0 : VF=(0.9*Ud);
167 : : }
168 [ # # ]: 0 : if (U<VF)
169 : 0 : {Vt_U=(1.0-((Vch_U*_logE((1.0+_exp(((U-VF)/Vch)))))+(Vch*_d0_logE((1.0+_exp(((U-VF)/Vch))))*((+_d0_exp(((U-VF)/Vch))*(((1.0-VF_U)*Vch-(U-VF)*Vch_U)/(Vch*Vch)))))));
170 : 0 : Vt_Ud=(-((Vch_Ud*_logE((1.0+_exp(((U-VF)/Vch)))))+(Vch*_d0_logE((1.0+_exp(((U-VF)/Vch))))*((+_d0_exp(((U-VF)/Vch))*(((-VF_Ud)*Vch-(U-VF)*Vch_Ud)/(Vch*Vch)))))));
171 : 0 : Vt=(U-(Vch*_logE((1.0+_exp(((U-VF)/Vch))))));
172 : : }
173 : : else
174 : 0 : {Vt_U=(VF_U-((Vch_U*_logE((1.0+_exp(((VF-U)/Vch)))))+(Vch*_d0_logE((1.0+_exp(((VF-U)/Vch))))*((+_d0_exp(((VF-U)/Vch))*(((VF_U-1.0)*Vch-(VF-U)*Vch_U)/(Vch*Vch)))))));
175 : 0 : Vt_Ud=(VF_Ud-((Vch_Ud*_logE((1.0+_exp(((VF-U)/Vch)))))+(Vch*_d0_logE((1.0+_exp(((VF-U)/Vch))))*((+_d0_exp(((VF-U)/Vch))*((VF_Ud*Vch-(VF-U)*Vch_Ud)/(Vch*Vch)))))));
176 : 0 : Vt=(VF-(Vch*_logE((1.0+_exp(((VF-U)/Vch))))));
177 : : }
178 : : }
179 : 0 : return Vt_U*d_U+Vt_Ud*d_Ud;
180 : : }
181 : :
182 : : /*
183 : : * analog function: diode
184 : : */
185 : 0 : double HBT_X_diode (double U, double Is, double Ug, double N, double AREA, double TJ, double TNOM)
186 : : {
187 : 0 : double diode=0.0;
188 : 0 : double VTH0=0.0;
189 : 0 : double VTHJ=0.0;
190 : 0 : double VTHNOM=0.0;
191 : 0 : double maxi=0.0;
192 : 0 : double Tmax=0.0;
193 : 0 : double TJM=0.0;
194 : 0 : double KDURCHQ=0.0;
195 : 0 : double lnIs=0.0;
196 : 0 : {VTH0=_vt((20.0+273.15));
197 : 0 : VTHNOM=_vt((TNOM+273.15));
198 : 0 : KDURCHQ=0.861708692e-4;
199 : 0 : lnIs=_logE((Is*AREA));
200 : 0 : maxi=_logE(1e6);
201 [ # # ][ # # ]: 0 : if ((maxi<(Ug/VTHNOM))&&(U<0.0))
202 : 0 : {Tmax=(((Ug*VTHNOM)/((Ug-(maxi*VTHNOM))*KDURCHQ))-273.15);
203 : 0 : TJM=HBT_X_Vt(TJ,Tmax);
204 : : }else
205 : 0 : {TJM=TJ;
206 : 0 : }VTHJ=_vt((TJM+273.15));
207 [ # # ]: 0 : if (Ug>0.0)
208 : 0 : {diode=(HBT_X_exp_soft(((((U/(N*VTHJ))+(Ug/VTHNOM))-(Ug/VTHJ))+lnIs))-HBT_X_exp_soft((((Ug/VTHNOM)-(Ug/VTHJ))+lnIs)));
209 : : }else
210 : 0 : {diode=(HBT_X_exp_soft(((U/(N*VTH0))+lnIs))-(Is*AREA));
211 : : }}
212 : 0 : return diode;
213 : : }
214 : 0 : double HBT_X_d_diode (double U, double Is, double Ug, double N, double AREA, double TJ, double TNOM, double d_U, double d_Is, double d_Ug, double d_N, double d_AREA, double d_TJ, double d_TNOM)
215 : : {
216 : 0 : double diode=0.0;
217 : 0 : double diode_U=0.0;
218 : 0 : double diode_Is=0.0;
219 : 0 : double diode_Ug=0.0;
220 : 0 : double diode_N=0.0;
221 : 0 : double diode_AREA=0.0;
222 : 0 : double diode_TJ=0.0;
223 : 0 : double diode_TNOM=0.0;
224 : 0 : double VTH0=0.0;
225 : 0 : double VTH0_U=0.0;
226 : 0 : double VTH0_Is=0.0;
227 : 0 : double VTH0_Ug=0.0;
228 : 0 : double VTH0_N=0.0;
229 : 0 : double VTH0_AREA=0.0;
230 : 0 : double VTH0_TJ=0.0;
231 : 0 : double VTH0_TNOM=0.0;
232 : 0 : double VTHJ=0.0;
233 : 0 : double VTHJ_U=0.0;
234 : 0 : double VTHJ_Is=0.0;
235 : 0 : double VTHJ_Ug=0.0;
236 : 0 : double VTHJ_N=0.0;
237 : 0 : double VTHJ_AREA=0.0;
238 : 0 : double VTHJ_TJ=0.0;
239 : 0 : double VTHJ_TNOM=0.0;
240 : 0 : double VTHNOM=0.0;
241 : 0 : double VTHNOM_U=0.0;
242 : 0 : double VTHNOM_Is=0.0;
243 : 0 : double VTHNOM_Ug=0.0;
244 : 0 : double VTHNOM_N=0.0;
245 : 0 : double VTHNOM_AREA=0.0;
246 : 0 : double VTHNOM_TJ=0.0;
247 : 0 : double VTHNOM_TNOM=0.0;
248 : 0 : double maxi=0.0;
249 : 0 : double maxi_U=0.0;
250 : 0 : double maxi_Is=0.0;
251 : 0 : double maxi_Ug=0.0;
252 : 0 : double maxi_N=0.0;
253 : 0 : double maxi_AREA=0.0;
254 : 0 : double maxi_TJ=0.0;
255 : 0 : double maxi_TNOM=0.0;
256 : 0 : double Tmax=0.0;
257 : 0 : double Tmax_U=0.0;
258 : 0 : double Tmax_Is=0.0;
259 : 0 : double Tmax_Ug=0.0;
260 : 0 : double Tmax_N=0.0;
261 : 0 : double Tmax_AREA=0.0;
262 : 0 : double Tmax_TJ=0.0;
263 : 0 : double Tmax_TNOM=0.0;
264 : 0 : double TJM=0.0;
265 : 0 : double TJM_U=0.0;
266 : 0 : double TJM_Is=0.0;
267 : 0 : double TJM_Ug=0.0;
268 : 0 : double TJM_N=0.0;
269 : 0 : double TJM_AREA=0.0;
270 : 0 : double TJM_TJ=0.0;
271 : 0 : double TJM_TNOM=0.0;
272 : 0 : double KDURCHQ=0.0;
273 : 0 : double KDURCHQ_U=0.0;
274 : 0 : double KDURCHQ_Is=0.0;
275 : 0 : double KDURCHQ_Ug=0.0;
276 : 0 : double KDURCHQ_N=0.0;
277 : 0 : double KDURCHQ_AREA=0.0;
278 : 0 : double KDURCHQ_TJ=0.0;
279 : 0 : double KDURCHQ_TNOM=0.0;
280 : 0 : double lnIs=0.0;
281 : 0 : double lnIs_U=0.0;
282 : 0 : double lnIs_Is=0.0;
283 : 0 : double lnIs_Ug=0.0;
284 : 0 : double lnIs_N=0.0;
285 : 0 : double lnIs_AREA=0.0;
286 : 0 : double lnIs_TJ=0.0;
287 : 0 : double lnIs_TNOM=0.0;
288 : 0 : {{VTH0_U=_d0_vt((20.0+273.15))*(0.0);
289 : 0 : VTH0_Is=_d0_vt((20.0+273.15))*(0.0);
290 : 0 : VTH0_Ug=_d0_vt((20.0+273.15))*(0.0);
291 : 0 : VTH0_N=_d0_vt((20.0+273.15))*(0.0);
292 : 0 : VTH0_AREA=_d0_vt((20.0+273.15))*(0.0);
293 : 0 : VTH0_TJ=_d0_vt((20.0+273.15))*(0.0);
294 : 0 : VTH0_TNOM=_d0_vt((20.0+273.15))*(0.0);
295 : 0 : VTH0=_vt((20.0+273.15));
296 : : }
297 : 0 : {VTHNOM_U=_d0_vt((TNOM+273.15))*(0.0);
298 : 0 : VTHNOM_Is=_d0_vt((TNOM+273.15))*(0.0);
299 : 0 : VTHNOM_Ug=_d0_vt((TNOM+273.15))*(0.0);
300 : 0 : VTHNOM_N=_d0_vt((TNOM+273.15))*(0.0);
301 : 0 : VTHNOM_AREA=_d0_vt((TNOM+273.15))*(0.0);
302 : 0 : VTHNOM_TJ=_d0_vt((TNOM+273.15))*(0.0);
303 : 0 : VTHNOM_TNOM=_d0_vt((TNOM+273.15))*(1.0);
304 : 0 : VTHNOM=_vt((TNOM+273.15));
305 : : }
306 : 0 : {KDURCHQ_U=0.0;
307 : 0 : KDURCHQ_Is=0.0;
308 : 0 : KDURCHQ_Ug=0.0;
309 : 0 : KDURCHQ_N=0.0;
310 : 0 : KDURCHQ_AREA=0.0;
311 : 0 : KDURCHQ_TJ=0.0;
312 : 0 : KDURCHQ_TNOM=0.0;
313 : 0 : KDURCHQ=0.861708692e-4;
314 : : }
315 : 0 : {lnIs_U=_d0_logE((Is*AREA))*(0.0);
316 : 0 : lnIs_Is=_d0_logE((Is*AREA))*((AREA));
317 : 0 : lnIs_Ug=_d0_logE((Is*AREA))*(0.0);
318 : 0 : lnIs_N=_d0_logE((Is*AREA))*(0.0);
319 : 0 : lnIs_AREA=_d0_logE((Is*AREA))*((Is));
320 : 0 : lnIs_TJ=_d0_logE((Is*AREA))*(0.0);
321 : 0 : lnIs_TNOM=_d0_logE((Is*AREA))*(0.0);
322 : 0 : lnIs=_logE((Is*AREA));
323 : : }
324 : 0 : {maxi_U=_d0_logE(1e6)*(0.0);
325 : 0 : maxi_Is=_d0_logE(1e6)*(0.0);
326 : 0 : maxi_Ug=_d0_logE(1e6)*(0.0);
327 : 0 : maxi_N=_d0_logE(1e6)*(0.0);
328 : 0 : maxi_AREA=_d0_logE(1e6)*(0.0);
329 : 0 : maxi_TJ=_d0_logE(1e6)*(0.0);
330 : 0 : maxi_TNOM=_d0_logE(1e6)*(0.0);
331 : 0 : maxi=_logE(1e6);
332 : : }
333 [ # # ][ # # ]: 0 : if ((maxi<(Ug/VTHNOM))&&(U<0.0))
334 : 0 : {{Tmax_U=((Ug*VTHNOM_U)*((Ug-(maxi*VTHNOM))*KDURCHQ)-(Ug*VTHNOM)*(((-((maxi_U*VTHNOM)+(maxi*VTHNOM_U)))*KDURCHQ)+((Ug-(maxi*VTHNOM))*KDURCHQ_U)))/(((Ug-(maxi*VTHNOM))*KDURCHQ)*((Ug-(maxi*VTHNOM))*KDURCHQ));
335 : 0 : Tmax_Is=((Ug*VTHNOM_Is)*((Ug-(maxi*VTHNOM))*KDURCHQ)-(Ug*VTHNOM)*(((-((maxi_Is*VTHNOM)+(maxi*VTHNOM_Is)))*KDURCHQ)+((Ug-(maxi*VTHNOM))*KDURCHQ_Is)))/(((Ug-(maxi*VTHNOM))*KDURCHQ)*((Ug-(maxi*VTHNOM))*KDURCHQ));
336 : 0 : Tmax_Ug=((VTHNOM+(VTHNOM_Ug*Ug))*((Ug-(maxi*VTHNOM))*KDURCHQ)-(Ug*VTHNOM)*(((1.0-((maxi_Ug*VTHNOM)+(maxi*VTHNOM_Ug)))*KDURCHQ)+((Ug-(maxi*VTHNOM))*KDURCHQ_Ug)))/(((Ug-(maxi*VTHNOM))*KDURCHQ)*((Ug-(maxi*VTHNOM))*KDURCHQ));
337 : 0 : Tmax_N=((Ug*VTHNOM_N)*((Ug-(maxi*VTHNOM))*KDURCHQ)-(Ug*VTHNOM)*(((-((maxi_N*VTHNOM)+(maxi*VTHNOM_N)))*KDURCHQ)+((Ug-(maxi*VTHNOM))*KDURCHQ_N)))/(((Ug-(maxi*VTHNOM))*KDURCHQ)*((Ug-(maxi*VTHNOM))*KDURCHQ));
338 : 0 : Tmax_AREA=((Ug*VTHNOM_AREA)*((Ug-(maxi*VTHNOM))*KDURCHQ)-(Ug*VTHNOM)*(((-((maxi_AREA*VTHNOM)+(maxi*VTHNOM_AREA)))*KDURCHQ)+((Ug-(maxi*VTHNOM))*KDURCHQ_AREA)))/(((Ug-(maxi*VTHNOM))*KDURCHQ)*((Ug-(maxi*VTHNOM))*KDURCHQ));
339 : 0 : Tmax_TJ=((Ug*VTHNOM_TJ)*((Ug-(maxi*VTHNOM))*KDURCHQ)-(Ug*VTHNOM)*(((-((maxi_TJ*VTHNOM)+(maxi*VTHNOM_TJ)))*KDURCHQ)+((Ug-(maxi*VTHNOM))*KDURCHQ_TJ)))/(((Ug-(maxi*VTHNOM))*KDURCHQ)*((Ug-(maxi*VTHNOM))*KDURCHQ));
340 : 0 : Tmax_TNOM=((Ug*VTHNOM_TNOM)*((Ug-(maxi*VTHNOM))*KDURCHQ)-(Ug*VTHNOM)*(((-((maxi_TNOM*VTHNOM)+(maxi*VTHNOM_TNOM)))*KDURCHQ)+((Ug-(maxi*VTHNOM))*KDURCHQ_TNOM)))/(((Ug-(maxi*VTHNOM))*KDURCHQ)*((Ug-(maxi*VTHNOM))*KDURCHQ));
341 : 0 : Tmax=(((Ug*VTHNOM)/((Ug-(maxi*VTHNOM))*KDURCHQ))-273.15);
342 : : }
343 : 0 : {TJM_U=HBT_X_d_Vt(TJ,Tmax,(0.0),(Tmax_U));
344 : 0 : TJM_Is=HBT_X_d_Vt(TJ,Tmax,(0.0),(Tmax_Is));
345 : 0 : TJM_Ug=HBT_X_d_Vt(TJ,Tmax,(0.0),(Tmax_Ug));
346 : 0 : TJM_N=HBT_X_d_Vt(TJ,Tmax,(0.0),(Tmax_N));
347 : 0 : TJM_AREA=HBT_X_d_Vt(TJ,Tmax,(0.0),(Tmax_AREA));
348 : 0 : TJM_TJ=HBT_X_d_Vt(TJ,Tmax,(1.0),(Tmax_TJ));
349 : 0 : TJM_TNOM=HBT_X_d_Vt(TJ,Tmax,(0.0),(Tmax_TNOM));
350 : 0 : TJM=HBT_X_Vt(TJ,Tmax);
351 : : }
352 : : }else
353 : 0 : {{TJM_U=0.0;
354 : 0 : TJM_Is=0.0;
355 : 0 : TJM_Ug=0.0;
356 : 0 : TJM_N=0.0;
357 : 0 : TJM_AREA=0.0;
358 : 0 : TJM_TJ=1.0;
359 : 0 : TJM_TNOM=0.0;
360 : 0 : TJM=TJ;
361 : : }
362 : 0 : }{VTHJ_U=_d0_vt((TJM+273.15))*(TJM_U);
363 : 0 : VTHJ_Is=_d0_vt((TJM+273.15))*(TJM_Is);
364 : 0 : VTHJ_Ug=_d0_vt((TJM+273.15))*(TJM_Ug);
365 : 0 : VTHJ_N=_d0_vt((TJM+273.15))*(TJM_N);
366 : 0 : VTHJ_AREA=_d0_vt((TJM+273.15))*(TJM_AREA);
367 : 0 : VTHJ_TJ=_d0_vt((TJM+273.15))*(TJM_TJ);
368 : 0 : VTHJ_TNOM=_d0_vt((TJM+273.15))*(TJM_TNOM);
369 : 0 : VTHJ=_vt((TJM+273.15));
370 : : }
371 [ # # ]: 0 : if (Ug>0.0)
372 : 0 : {{diode_U=(HBT_X_d_exp_soft(((((U/(N*VTHJ))+(Ug/VTHNOM))-(Ug/VTHJ))+lnIs),(((((((N*VTHJ)-(U*(N*VTHJ_U)))/((N*VTHJ)*(N*VTHJ)))+(-(Ug*VTHNOM_U)/(VTHNOM*VTHNOM)))-(-(Ug*VTHJ_U)/(VTHJ*VTHJ)))+lnIs_U)))-HBT_X_d_exp_soft((((Ug/VTHNOM)-(Ug/VTHJ))+lnIs),((((-(Ug*VTHNOM_U)/(VTHNOM*VTHNOM))-(-(Ug*VTHJ_U)/(VTHJ*VTHJ)))+lnIs_U))));
373 : 0 : diode_Is=(HBT_X_d_exp_soft(((((U/(N*VTHJ))+(Ug/VTHNOM))-(Ug/VTHJ))+lnIs),(((((-(U*(N*VTHJ_Is))/((N*VTHJ)*(N*VTHJ)))+(-(Ug*VTHNOM_Is)/(VTHNOM*VTHNOM)))-(-(Ug*VTHJ_Is)/(VTHJ*VTHJ)))+lnIs_Is)))-HBT_X_d_exp_soft((((Ug/VTHNOM)-(Ug/VTHJ))+lnIs),((((-(Ug*VTHNOM_Is)/(VTHNOM*VTHNOM))-(-(Ug*VTHJ_Is)/(VTHJ*VTHJ)))+lnIs_Is))));
374 : 0 : diode_Ug=(HBT_X_d_exp_soft(((((U/(N*VTHJ))+(Ug/VTHNOM))-(Ug/VTHJ))+lnIs),(((((-(U*(N*VTHJ_Ug))/((N*VTHJ)*(N*VTHJ)))+((VTHNOM-(Ug*VTHNOM_Ug))/(VTHNOM*VTHNOM)))-((VTHJ-(Ug*VTHJ_Ug))/(VTHJ*VTHJ)))+lnIs_Ug)))-HBT_X_d_exp_soft((((Ug/VTHNOM)-(Ug/VTHJ))+lnIs),(((((VTHNOM-(Ug*VTHNOM_Ug))/(VTHNOM*VTHNOM))-((VTHJ-(Ug*VTHJ_Ug))/(VTHJ*VTHJ)))+lnIs_Ug))));
375 : 0 : diode_N=(HBT_X_d_exp_soft(((((U/(N*VTHJ))+(Ug/VTHNOM))-(Ug/VTHJ))+lnIs),(((((-(U*(VTHJ+(VTHJ_N*N)))/((N*VTHJ)*(N*VTHJ)))+(-(Ug*VTHNOM_N)/(VTHNOM*VTHNOM)))-(-(Ug*VTHJ_N)/(VTHJ*VTHJ)))+lnIs_N)))-HBT_X_d_exp_soft((((Ug/VTHNOM)-(Ug/VTHJ))+lnIs),((((-(Ug*VTHNOM_N)/(VTHNOM*VTHNOM))-(-(Ug*VTHJ_N)/(VTHJ*VTHJ)))+lnIs_N))));
376 : 0 : diode_AREA=(HBT_X_d_exp_soft(((((U/(N*VTHJ))+(Ug/VTHNOM))-(Ug/VTHJ))+lnIs),(((((-(U*(N*VTHJ_AREA))/((N*VTHJ)*(N*VTHJ)))+(-(Ug*VTHNOM_AREA)/(VTHNOM*VTHNOM)))-(-(Ug*VTHJ_AREA)/(VTHJ*VTHJ)))+lnIs_AREA)))-HBT_X_d_exp_soft((((Ug/VTHNOM)-(Ug/VTHJ))+lnIs),((((-(Ug*VTHNOM_AREA)/(VTHNOM*VTHNOM))-(-(Ug*VTHJ_AREA)/(VTHJ*VTHJ)))+lnIs_AREA))));
377 : 0 : diode_TJ=(HBT_X_d_exp_soft(((((U/(N*VTHJ))+(Ug/VTHNOM))-(Ug/VTHJ))+lnIs),(((((-(U*(N*VTHJ_TJ))/((N*VTHJ)*(N*VTHJ)))+(-(Ug*VTHNOM_TJ)/(VTHNOM*VTHNOM)))-(-(Ug*VTHJ_TJ)/(VTHJ*VTHJ)))+lnIs_TJ)))-HBT_X_d_exp_soft((((Ug/VTHNOM)-(Ug/VTHJ))+lnIs),((((-(Ug*VTHNOM_TJ)/(VTHNOM*VTHNOM))-(-(Ug*VTHJ_TJ)/(VTHJ*VTHJ)))+lnIs_TJ))));
378 : 0 : diode_TNOM=(HBT_X_d_exp_soft(((((U/(N*VTHJ))+(Ug/VTHNOM))-(Ug/VTHJ))+lnIs),(((((-(U*(N*VTHJ_TNOM))/((N*VTHJ)*(N*VTHJ)))+(-(Ug*VTHNOM_TNOM)/(VTHNOM*VTHNOM)))-(-(Ug*VTHJ_TNOM)/(VTHJ*VTHJ)))+lnIs_TNOM)))-HBT_X_d_exp_soft((((Ug/VTHNOM)-(Ug/VTHJ))+lnIs),((((-(Ug*VTHNOM_TNOM)/(VTHNOM*VTHNOM))-(-(Ug*VTHJ_TNOM)/(VTHJ*VTHJ)))+lnIs_TNOM))));
379 : 0 : diode=(HBT_X_exp_soft(((((U/(N*VTHJ))+(Ug/VTHNOM))-(Ug/VTHJ))+lnIs))-HBT_X_exp_soft((((Ug/VTHNOM)-(Ug/VTHJ))+lnIs)));
380 : : }
381 : : }else
382 : 0 : {{diode_U=HBT_X_d_exp_soft(((U/(N*VTH0))+lnIs),(((((N*VTH0)-(U*(N*VTH0_U)))/((N*VTH0)*(N*VTH0)))+lnIs_U)));
383 : 0 : diode_Is=(HBT_X_d_exp_soft(((U/(N*VTH0))+lnIs),(((-(U*(N*VTH0_Is))/((N*VTH0)*(N*VTH0)))+lnIs_Is)))-(AREA));
384 : 0 : diode_Ug=HBT_X_d_exp_soft(((U/(N*VTH0))+lnIs),(((-(U*(N*VTH0_Ug))/((N*VTH0)*(N*VTH0)))+lnIs_Ug)));
385 : 0 : diode_N=HBT_X_d_exp_soft(((U/(N*VTH0))+lnIs),(((-(U*(VTH0+(VTH0_N*N)))/((N*VTH0)*(N*VTH0)))+lnIs_N)));
386 : 0 : diode_AREA=(HBT_X_d_exp_soft(((U/(N*VTH0))+lnIs),(((-(U*(N*VTH0_AREA))/((N*VTH0)*(N*VTH0)))+lnIs_AREA)))-(Is));
387 : 0 : diode_TJ=HBT_X_d_exp_soft(((U/(N*VTH0))+lnIs),(((-(U*(N*VTH0_TJ))/((N*VTH0)*(N*VTH0)))+lnIs_TJ)));
388 : 0 : diode_TNOM=HBT_X_d_exp_soft(((U/(N*VTH0))+lnIs),(((-(U*(N*VTH0_TNOM))/((N*VTH0)*(N*VTH0)))+lnIs_TNOM)));
389 : 0 : diode=(HBT_X_exp_soft(((U/(N*VTH0))+lnIs))-(Is*AREA));
390 : : }
391 : : }}
392 : 0 : return diode_U*d_U+diode_Is*d_Is+diode_Ug*d_Ug+diode_N*d_N+diode_AREA*d_AREA+diode_TJ*d_TJ+diode_TNOM*d_TNOM;
393 : : }
394 : :
395 : : /*
396 : : * analog function: MM
397 : : */
398 : 0 : double HBT_X_MM (double VBCI, double VCBO, double MC, double VCBLIN, double BF, double KC)
399 : : {
400 : 0 : double MM=0.0;
401 : 0 : double FBD=0.0;
402 : 0 : double vcbi=0.0;
403 [ # # ][ # # ]: 0 : {if (((KC>0.0)&&(MC>0.0))&&(VCBO>0.0))
[ # # ]
404 : 0 : {vcbi=VBCI;
405 : 0 : FBD=(VCBLIN/VCBO);
406 [ # # ]: 0 : if (VBCI>0.0)
407 : 0 : MM=1.0;
408 : : else
409 [ # # ]: 0 : if (VBCI>(-VCBLIN))
410 [ # # ]: 0 : {if (MC==1)
411 : 0 : MM=(1.0/(1.0-(vcbi/(-VCBO))));
412 : : else
413 : 0 : MM=(1.0/(1.0-_pow((vcbi/(-VCBO)),MC)));
414 : : }else
415 [ # # ]: 0 : if (VBCI<=(-VCBLIN))
416 [ # # ]: 0 : {if (MC==1)
417 : 0 : {MM=((1.0/(1.0-FBD))-((((1.0/VCBO)*1.0)/_pow((1.0-FBD),2.0))*(vcbi+(FBD*VCBO))));
418 : : }else
419 : 0 : {MM=((1.0/(1.0-_pow(FBD,MC)))-((((MC/VCBO)*_pow(FBD,(MC-1.0)))/_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi+(FBD*VCBO))));
420 : : }}}else
421 : 0 : MM=1.0;
422 : : }
423 : 0 : return MM;
424 : : }
425 : 0 : double HBT_X_d_MM (double VBCI, double VCBO, double MC, double VCBLIN, double BF, double KC, double d_VBCI, double d_VCBO, double d_MC, double d_VCBLIN, double d_BF, double d_KC)
426 : : {
427 : 0 : double MM=0.0;
428 : 0 : double MM_VBCI=0.0;
429 : 0 : double MM_VCBO=0.0;
430 : 0 : double MM_MC=0.0;
431 : 0 : double MM_VCBLIN=0.0;
432 : 0 : double MM_BF=0.0;
433 : 0 : double MM_KC=0.0;
434 : 0 : double FBD=0.0;
435 : 0 : double FBD_VBCI=0.0;
436 : 0 : double FBD_VCBO=0.0;
437 : 0 : double FBD_MC=0.0;
438 : 0 : double FBD_VCBLIN=0.0;
439 : 0 : double FBD_BF=0.0;
440 : 0 : double FBD_KC=0.0;
441 : 0 : double vcbi=0.0;
442 : 0 : double vcbi_VBCI=0.0;
443 : 0 : double vcbi_VCBO=0.0;
444 : 0 : double vcbi_MC=0.0;
445 : 0 : double vcbi_VCBLIN=0.0;
446 : 0 : double vcbi_BF=0.0;
447 : 0 : double vcbi_KC=0.0;
448 [ # # ][ # # ]: 0 : {if (((KC>0.0)&&(MC>0.0))&&(VCBO>0.0))
[ # # ]
449 : 0 : {{vcbi_VBCI=1.0;
450 : 0 : vcbi_VCBO=0.0;
451 : 0 : vcbi_MC=0.0;
452 : 0 : vcbi_VCBLIN=0.0;
453 : 0 : vcbi_BF=0.0;
454 : 0 : vcbi_KC=0.0;
455 : 0 : vcbi=VBCI;
456 : : }
457 : 0 : {FBD_VBCI=0.0;
458 : 0 : FBD_VCBO=(-VCBLIN/(VCBO*VCBO));
459 : 0 : FBD_MC=0.0;
460 : 0 : FBD_VCBLIN=(1/VCBO);
461 : 0 : FBD_BF=0.0;
462 : 0 : FBD_KC=0.0;
463 : 0 : FBD=(VCBLIN/VCBO);
464 : : }
465 [ # # ]: 0 : if (VBCI>0.0)
466 : 0 : {MM_VBCI=0.0;
467 : 0 : MM_VCBO=0.0;
468 : 0 : MM_MC=0.0;
469 : 0 : MM_VCBLIN=0.0;
470 : 0 : MM_BF=0.0;
471 : 0 : MM_KC=0.0;
472 : 0 : MM=1.0;
473 : : }
474 : : else
475 [ # # ]: 0 : if (VBCI>(-VCBLIN))
476 [ # # ]: 0 : {if (MC==1)
477 : 0 : {MM_VBCI=(-(-vcbi_VBCI/(-VCBO))/((1.0-(vcbi/(-VCBO)))*(1.0-(vcbi/(-VCBO)))));
478 : 0 : MM_VCBO=(-(-vcbi_VCBO/(-VCBO))/((1.0-(vcbi/(-VCBO)))*(1.0-(vcbi/(-VCBO)))));
479 : 0 : MM_MC=(-(-vcbi_MC/(-VCBO))/((1.0-(vcbi/(-VCBO)))*(1.0-(vcbi/(-VCBO)))));
480 : 0 : MM_VCBLIN=(-(-vcbi_VCBLIN/(-VCBO))/((1.0-(vcbi/(-VCBO)))*(1.0-(vcbi/(-VCBO)))));
481 : 0 : MM_BF=(-(-vcbi_BF/(-VCBO))/((1.0-(vcbi/(-VCBO)))*(1.0-(vcbi/(-VCBO)))));
482 : 0 : MM_KC=(-(-vcbi_KC/(-VCBO))/((1.0-(vcbi/(-VCBO)))*(1.0-(vcbi/(-VCBO)))));
483 : 0 : MM=(1.0/(1.0-(vcbi/(-VCBO))));
484 : : }
485 : : else
486 : 0 : {MM_VBCI=(-(-_d0_pow((vcbi/(-VCBO)),MC)*(vcbi_VBCI/(-VCBO))+_d1_pow((vcbi/(-VCBO)),MC)*(0.0))/((1.0-_pow((vcbi/(-VCBO)),MC))*(1.0-_pow((vcbi/(-VCBO)),MC))));
487 : 0 : MM_VCBO=(-(-_d0_pow((vcbi/(-VCBO)),MC)*(vcbi_VCBO/(-VCBO))+_d1_pow((vcbi/(-VCBO)),MC)*(0.0))/((1.0-_pow((vcbi/(-VCBO)),MC))*(1.0-_pow((vcbi/(-VCBO)),MC))));
488 : 0 : MM_MC=(-(-_d0_pow((vcbi/(-VCBO)),MC)*(vcbi_MC/(-VCBO))+_d1_pow((vcbi/(-VCBO)),MC)*(1.0))/((1.0-_pow((vcbi/(-VCBO)),MC))*(1.0-_pow((vcbi/(-VCBO)),MC))));
489 : 0 : MM_VCBLIN=(-(-_d0_pow((vcbi/(-VCBO)),MC)*(vcbi_VCBLIN/(-VCBO))+_d1_pow((vcbi/(-VCBO)),MC)*(0.0))/((1.0-_pow((vcbi/(-VCBO)),MC))*(1.0-_pow((vcbi/(-VCBO)),MC))));
490 : 0 : MM_BF=(-(-_d0_pow((vcbi/(-VCBO)),MC)*(vcbi_BF/(-VCBO))+_d1_pow((vcbi/(-VCBO)),MC)*(0.0))/((1.0-_pow((vcbi/(-VCBO)),MC))*(1.0-_pow((vcbi/(-VCBO)),MC))));
491 : 0 : MM_KC=(-(-_d0_pow((vcbi/(-VCBO)),MC)*(vcbi_KC/(-VCBO))+_d1_pow((vcbi/(-VCBO)),MC)*(0.0))/((1.0-_pow((vcbi/(-VCBO)),MC))*(1.0-_pow((vcbi/(-VCBO)),MC))));
492 : 0 : MM=(1.0/(1.0-_pow((vcbi/(-VCBO)),MC)));
493 : : }
494 : : }else
495 [ # # ]: 0 : if (VBCI<=(-VCBLIN))
496 [ # # ]: 0 : {if (MC==1)
497 : 0 : {{MM_VBCI=((-(-FBD_VBCI)/((1.0-FBD)*(1.0-FBD)))-(((-(((1.0/VCBO)*1.0)*_d0_pow((1.0-FBD),2.0)*((-FBD_VBCI))+_d1_pow((1.0-FBD),2.0)*(0.0))/(_pow((1.0-FBD),2.0)*_pow((1.0-FBD),2.0)))*(vcbi+(FBD*VCBO)))+((((1.0/VCBO)*1.0)/_pow((1.0-FBD),2.0))*(vcbi_VBCI+FBD_VBCI*VCBO))));
498 : 0 : MM_VCBO=((-(-FBD_VCBO)/((1.0-FBD)*(1.0-FBD)))-((((-1/(VCBO*VCBO))*1.0*_pow((1.0-FBD),2.0)-((1.0/VCBO)*1.0)*_d0_pow((1.0-FBD),2.0)*((-FBD_VCBO))+_d1_pow((1.0-FBD),2.0)*(0.0))/(_pow((1.0-FBD),2.0)*_pow((1.0-FBD),2.0))*(vcbi+(FBD*VCBO)))+((((1.0/VCBO)*1.0)/_pow((1.0-FBD),2.0))*(vcbi_VCBO+(FBD_VCBO*VCBO)+FBD))));
499 : 0 : MM_MC=((-(-FBD_MC)/((1.0-FBD)*(1.0-FBD)))-(((-(((1.0/VCBO)*1.0)*_d0_pow((1.0-FBD),2.0)*((-FBD_MC))+_d1_pow((1.0-FBD),2.0)*(0.0))/(_pow((1.0-FBD),2.0)*_pow((1.0-FBD),2.0)))*(vcbi+(FBD*VCBO)))+((((1.0/VCBO)*1.0)/_pow((1.0-FBD),2.0))*(vcbi_MC+FBD_MC*VCBO))));
500 : 0 : MM_VCBLIN=((-(-FBD_VCBLIN)/((1.0-FBD)*(1.0-FBD)))-(((-(((1.0/VCBO)*1.0)*_d0_pow((1.0-FBD),2.0)*((-FBD_VCBLIN))+_d1_pow((1.0-FBD),2.0)*(0.0))/(_pow((1.0-FBD),2.0)*_pow((1.0-FBD),2.0)))*(vcbi+(FBD*VCBO)))+((((1.0/VCBO)*1.0)/_pow((1.0-FBD),2.0))*(vcbi_VCBLIN+FBD_VCBLIN*VCBO))));
501 : 0 : MM_BF=((-(-FBD_BF)/((1.0-FBD)*(1.0-FBD)))-(((-(((1.0/VCBO)*1.0)*_d0_pow((1.0-FBD),2.0)*((-FBD_BF))+_d1_pow((1.0-FBD),2.0)*(0.0))/(_pow((1.0-FBD),2.0)*_pow((1.0-FBD),2.0)))*(vcbi+(FBD*VCBO)))+((((1.0/VCBO)*1.0)/_pow((1.0-FBD),2.0))*(vcbi_BF+FBD_BF*VCBO))));
502 : 0 : MM_KC=((-(-FBD_KC)/((1.0-FBD)*(1.0-FBD)))-(((-(((1.0/VCBO)*1.0)*_d0_pow((1.0-FBD),2.0)*((-FBD_KC))+_d1_pow((1.0-FBD),2.0)*(0.0))/(_pow((1.0-FBD),2.0)*_pow((1.0-FBD),2.0)))*(vcbi+(FBD*VCBO)))+((((1.0/VCBO)*1.0)/_pow((1.0-FBD),2.0))*(vcbi_KC+FBD_KC*VCBO))));
503 : 0 : MM=((1.0/(1.0-FBD))-((((1.0/VCBO)*1.0)/_pow((1.0-FBD),2.0))*(vcbi+(FBD*VCBO))));
504 : : }
505 : : }else
506 : 0 : {{MM_VBCI=((-(-_d0_pow(FBD,MC)*(FBD_VBCI)+_d1_pow(FBD,MC)*(0.0))/((1.0-_pow(FBD,MC))*(1.0-_pow(FBD,MC))))-(((((MC/VCBO)*_d0_pow(FBD,(MC-1.0))*(FBD_VBCI)+_d1_pow(FBD,(MC-1.0))*(0.0))*_pow((1.0-_pow(FBD,MC)),2.0)-((MC/VCBO)*_pow(FBD,(MC-1.0)))*_d0_pow((1.0-_pow(FBD,MC)),2.0)*((-_d0_pow(FBD,MC)*(FBD_VBCI)+_d1_pow(FBD,MC)*(0.0)))+_d1_pow((1.0-_pow(FBD,MC)),2.0)*(0.0))/(_pow((1.0-_pow(FBD,MC)),2.0)*_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi+(FBD*VCBO)))+((((MC/VCBO)*_pow(FBD,(MC-1.0)))/_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi_VBCI+FBD_VBCI*VCBO))));
507 : 0 : MM_VCBO=((-(-_d0_pow(FBD,MC)*(FBD_VCBO)+_d1_pow(FBD,MC)*(0.0))/((1.0-_pow(FBD,MC))*(1.0-_pow(FBD,MC))))-((((((-MC/(VCBO*VCBO))*_pow(FBD,(MC-1.0)))+((MC/VCBO)*_d0_pow(FBD,(MC-1.0))*(FBD_VCBO)+_d1_pow(FBD,(MC-1.0))*(0.0)))*_pow((1.0-_pow(FBD,MC)),2.0)-((MC/VCBO)*_pow(FBD,(MC-1.0)))*_d0_pow((1.0-_pow(FBD,MC)),2.0)*((-_d0_pow(FBD,MC)*(FBD_VCBO)+_d1_pow(FBD,MC)*(0.0)))+_d1_pow((1.0-_pow(FBD,MC)),2.0)*(0.0))/(_pow((1.0-_pow(FBD,MC)),2.0)*_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi+(FBD*VCBO)))+((((MC/VCBO)*_pow(FBD,(MC-1.0)))/_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi_VCBO+(FBD_VCBO*VCBO)+FBD))));
508 : 0 : MM_MC=((-(-_d0_pow(FBD,MC)*(FBD_MC)+_d1_pow(FBD,MC)*(1.0))/((1.0-_pow(FBD,MC))*(1.0-_pow(FBD,MC))))-((((((1/VCBO)*_pow(FBD,(MC-1.0)))+((MC/VCBO)*_d0_pow(FBD,(MC-1.0))*(FBD_MC)+_d1_pow(FBD,(MC-1.0))*(1.0)))*_pow((1.0-_pow(FBD,MC)),2.0)-((MC/VCBO)*_pow(FBD,(MC-1.0)))*_d0_pow((1.0-_pow(FBD,MC)),2.0)*((-_d0_pow(FBD,MC)*(FBD_MC)+_d1_pow(FBD,MC)*(1.0)))+_d1_pow((1.0-_pow(FBD,MC)),2.0)*(0.0))/(_pow((1.0-_pow(FBD,MC)),2.0)*_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi+(FBD*VCBO)))+((((MC/VCBO)*_pow(FBD,(MC-1.0)))/_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi_MC+FBD_MC*VCBO))));
509 : 0 : MM_VCBLIN=((-(-_d0_pow(FBD,MC)*(FBD_VCBLIN)+_d1_pow(FBD,MC)*(0.0))/((1.0-_pow(FBD,MC))*(1.0-_pow(FBD,MC))))-(((((MC/VCBO)*_d0_pow(FBD,(MC-1.0))*(FBD_VCBLIN)+_d1_pow(FBD,(MC-1.0))*(0.0))*_pow((1.0-_pow(FBD,MC)),2.0)-((MC/VCBO)*_pow(FBD,(MC-1.0)))*_d0_pow((1.0-_pow(FBD,MC)),2.0)*((-_d0_pow(FBD,MC)*(FBD_VCBLIN)+_d1_pow(FBD,MC)*(0.0)))+_d1_pow((1.0-_pow(FBD,MC)),2.0)*(0.0))/(_pow((1.0-_pow(FBD,MC)),2.0)*_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi+(FBD*VCBO)))+((((MC/VCBO)*_pow(FBD,(MC-1.0)))/_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi_VCBLIN+FBD_VCBLIN*VCBO))));
510 : 0 : MM_BF=((-(-_d0_pow(FBD,MC)*(FBD_BF)+_d1_pow(FBD,MC)*(0.0))/((1.0-_pow(FBD,MC))*(1.0-_pow(FBD,MC))))-(((((MC/VCBO)*_d0_pow(FBD,(MC-1.0))*(FBD_BF)+_d1_pow(FBD,(MC-1.0))*(0.0))*_pow((1.0-_pow(FBD,MC)),2.0)-((MC/VCBO)*_pow(FBD,(MC-1.0)))*_d0_pow((1.0-_pow(FBD,MC)),2.0)*((-_d0_pow(FBD,MC)*(FBD_BF)+_d1_pow(FBD,MC)*(0.0)))+_d1_pow((1.0-_pow(FBD,MC)),2.0)*(0.0))/(_pow((1.0-_pow(FBD,MC)),2.0)*_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi+(FBD*VCBO)))+((((MC/VCBO)*_pow(FBD,(MC-1.0)))/_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi_BF+FBD_BF*VCBO))));
511 : 0 : MM_KC=((-(-_d0_pow(FBD,MC)*(FBD_KC)+_d1_pow(FBD,MC)*(0.0))/((1.0-_pow(FBD,MC))*(1.0-_pow(FBD,MC))))-(((((MC/VCBO)*_d0_pow(FBD,(MC-1.0))*(FBD_KC)+_d1_pow(FBD,(MC-1.0))*(0.0))*_pow((1.0-_pow(FBD,MC)),2.0)-((MC/VCBO)*_pow(FBD,(MC-1.0)))*_d0_pow((1.0-_pow(FBD,MC)),2.0)*((-_d0_pow(FBD,MC)*(FBD_KC)+_d1_pow(FBD,MC)*(0.0)))+_d1_pow((1.0-_pow(FBD,MC)),2.0)*(0.0))/(_pow((1.0-_pow(FBD,MC)),2.0)*_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi+(FBD*VCBO)))+((((MC/VCBO)*_pow(FBD,(MC-1.0)))/_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi_KC+FBD_KC*VCBO))));
512 : 0 : MM=((1.0/(1.0-_pow(FBD,MC)))-((((MC/VCBO)*_pow(FBD,(MC-1.0)))/_pow((1.0-_pow(FBD,MC)),2.0))*(vcbi+(FBD*VCBO))));
513 : : }
514 : : }}}else
515 : 0 : {MM_VBCI=0.0;
516 : 0 : MM_VCBO=0.0;
517 : 0 : MM_MC=0.0;
518 : 0 : MM_VCBLIN=0.0;
519 : 0 : MM_BF=0.0;
520 : 0 : MM_KC=0.0;
521 : 0 : MM=1.0;
522 : : }
523 : : }
524 : 0 : return MM_VBCI*d_VBCI+MM_VCBO*d_VCBO+MM_MC*d_MC+MM_VCBLIN*d_VCBLIN+MM_BF*d_BF+MM_KC*d_KC;
525 : : }
526 : :
527 : : /*
528 : : * analog function: charge
529 : : */
530 : 0 : double HBT_X_charge (double U, double C0, double Ud, double m, double Area)
531 : : {
532 : 0 : double charge=0.0;
533 : 0 : double Vj=0.0;
534 : 0 : double Vjo=0.0;
535 : 0 : double VF=0.0;
536 : 0 : {Vj=HBT_X_Vt(U,Ud);
537 : 0 : Vjo=HBT_X_Vt(0.0,Ud);
538 : 0 : VF=(0.9*Ud);
539 [ # # ]: 0 : if (m==1.0)
540 : 0 : {charge=((Area*C0)*((Ud*(_logE((1.0-(Vjo/Ud)))-_logE((1.0-(Vj/Ud)))))+((1.0/(1.0-(VF/Ud)))*((U-Vj)+Vjo))));
541 : : }else
542 : 0 : {charge=((Area*C0)*((((Ud/(1.0-m))*(_pow((1.0-(Vjo/Ud)),(1.0-m))-_pow((1.0-(Vj/Ud)),(1.0-m))))+(_pow((1.0-(VF/Ud)),(-m))*((U-Vj)+Vjo)))-(Ud*(1.0/(1.0-m)))));
543 : : }}
544 : 0 : return charge;
545 : : }
546 : 0 : double HBT_X_d_charge (double U, double C0, double Ud, double m, double Area, double d_U, double d_C0, double d_Ud, double d_m, double d_Area)
547 : : {
548 : 0 : double charge=0.0;
549 : 0 : double charge_U=0.0;
550 : 0 : double charge_C0=0.0;
551 : 0 : double charge_Ud=0.0;
552 : 0 : double charge_m=0.0;
553 : 0 : double charge_Area=0.0;
554 : 0 : double Vj=0.0;
555 : 0 : double Vj_U=0.0;
556 : 0 : double Vj_C0=0.0;
557 : 0 : double Vj_Ud=0.0;
558 : 0 : double Vj_m=0.0;
559 : 0 : double Vj_Area=0.0;
560 : 0 : double Vjo=0.0;
561 : 0 : double Vjo_U=0.0;
562 : 0 : double Vjo_C0=0.0;
563 : 0 : double Vjo_Ud=0.0;
564 : 0 : double Vjo_m=0.0;
565 : 0 : double Vjo_Area=0.0;
566 : 0 : double VF=0.0;
567 : 0 : double VF_U=0.0;
568 : 0 : double VF_C0=0.0;
569 : 0 : double VF_Ud=0.0;
570 : 0 : double VF_m=0.0;
571 : 0 : double VF_Area=0.0;
572 : 0 : {{Vj_U=HBT_X_d_Vt(U,Ud,(1.0),(0.0));
573 : 0 : Vj_C0=HBT_X_d_Vt(U,Ud,(0.0),(0.0));
574 : 0 : Vj_Ud=HBT_X_d_Vt(U,Ud,(0.0),(1.0));
575 : 0 : Vj_m=HBT_X_d_Vt(U,Ud,(0.0),(0.0));
576 : 0 : Vj_Area=HBT_X_d_Vt(U,Ud,(0.0),(0.0));
577 : 0 : Vj=HBT_X_Vt(U,Ud);
578 : : }
579 : 0 : {Vjo_U=HBT_X_d_Vt(0.0,Ud,(0.0),(0.0));
580 : 0 : Vjo_C0=HBT_X_d_Vt(0.0,Ud,(0.0),(0.0));
581 : 0 : Vjo_Ud=HBT_X_d_Vt(0.0,Ud,(0.0),(1.0));
582 : 0 : Vjo_m=HBT_X_d_Vt(0.0,Ud,(0.0),(0.0));
583 : 0 : Vjo_Area=HBT_X_d_Vt(0.0,Ud,(0.0),(0.0));
584 : 0 : Vjo=HBT_X_Vt(0.0,Ud);
585 : : }
586 : 0 : {VF_U=0.0;
587 : 0 : VF_C0=0.0;
588 : 0 : VF_Ud=(0.9);
589 : 0 : VF_m=0.0;
590 : 0 : VF_Area=0.0;
591 : 0 : VF=(0.9*Ud);
592 : : }
593 [ # # ]: 0 : if (m==1.0)
594 : 0 : {{charge_U=((Area*C0)*((Ud*(_d0_logE((1.0-(Vjo/Ud)))*((-Vjo_U/Ud))-_d0_logE((1.0-(Vj/Ud)))*((-Vj_U/Ud))))+(((-(-VF_U/Ud)/((1.0-(VF/Ud))*(1.0-(VF/Ud))))*((U-Vj)+Vjo))+((1.0/(1.0-(VF/Ud)))*((1.0-Vj_U)+Vjo_U)))));
595 : 0 : charge_C0=(((Area)*((Ud*(_logE((1.0-(Vjo/Ud)))-_logE((1.0-(Vj/Ud)))))+((1.0/(1.0-(VF/Ud)))*((U-Vj)+Vjo))))+((Area*C0)*((Ud*(_d0_logE((1.0-(Vjo/Ud)))*((-Vjo_C0/Ud))-_d0_logE((1.0-(Vj/Ud)))*((-Vj_C0/Ud))))+(((-(-VF_C0/Ud)/((1.0-(VF/Ud))*(1.0-(VF/Ud))))*((U-Vj)+Vjo))+((1.0/(1.0-(VF/Ud)))*((-Vj_C0)+Vjo_C0))))));
596 : 0 : charge_Ud=((Area*C0)*(((_logE((1.0-(Vjo/Ud)))-_logE((1.0-(Vj/Ud))))+((_d0_logE((1.0-(Vjo/Ud)))*((-((Vjo_Ud*Ud)-Vjo)/(Ud*Ud)))-_d0_logE((1.0-(Vj/Ud)))*((-((Vj_Ud*Ud)-Vj)/(Ud*Ud))))*Ud))+(((-(-((VF_Ud*Ud)-VF)/(Ud*Ud))/((1.0-(VF/Ud))*(1.0-(VF/Ud))))*((U-Vj)+Vjo))+((1.0/(1.0-(VF/Ud)))*((-Vj_Ud)+Vjo_Ud)))));
597 : 0 : charge_m=((Area*C0)*((Ud*(_d0_logE((1.0-(Vjo/Ud)))*((-Vjo_m/Ud))-_d0_logE((1.0-(Vj/Ud)))*((-Vj_m/Ud))))+(((-(-VF_m/Ud)/((1.0-(VF/Ud))*(1.0-(VF/Ud))))*((U-Vj)+Vjo))+((1.0/(1.0-(VF/Ud)))*((-Vj_m)+Vjo_m)))));
598 : 0 : charge_Area=(((C0)*((Ud*(_logE((1.0-(Vjo/Ud)))-_logE((1.0-(Vj/Ud)))))+((1.0/(1.0-(VF/Ud)))*((U-Vj)+Vjo))))+((Area*C0)*((Ud*(_d0_logE((1.0-(Vjo/Ud)))*((-Vjo_Area/Ud))-_d0_logE((1.0-(Vj/Ud)))*((-Vj_Area/Ud))))+(((-(-VF_Area/Ud)/((1.0-(VF/Ud))*(1.0-(VF/Ud))))*((U-Vj)+Vjo))+((1.0/(1.0-(VF/Ud)))*((-Vj_Area)+Vjo_Area))))));
599 : 0 : charge=((Area*C0)*((Ud*(_logE((1.0-(Vjo/Ud)))-_logE((1.0-(Vj/Ud)))))+((1.0/(1.0-(VF/Ud)))*((U-Vj)+Vjo))));
600 : : }
601 : : }else
602 : 0 : {{charge_U=((Area*C0)*(((Ud/(1.0-m))*(_d0_pow((1.0-(Vjo/Ud)),(1.0-m))*((-Vjo_U/Ud))+_d1_pow((1.0-(Vjo/Ud)),(1.0-m))*(0.0)-_d0_pow((1.0-(Vj/Ud)),(1.0-m))*((-Vj_U/Ud))+_d1_pow((1.0-(Vj/Ud)),(1.0-m))*(0.0)))+((_d0_pow((1.0-(VF/Ud)),(-m))*((-VF_U/Ud))+_d1_pow((1.0-(VF/Ud)),(-m))*(0.0)*((U-Vj)+Vjo))+(_pow((1.0-(VF/Ud)),(-m))*((1.0-Vj_U)+Vjo_U)))));
603 : 0 : charge_C0=(((Area)*((((Ud/(1.0-m))*(_pow((1.0-(Vjo/Ud)),(1.0-m))-_pow((1.0-(Vj/Ud)),(1.0-m))))+(_pow((1.0-(VF/Ud)),(-m))*((U-Vj)+Vjo)))-(Ud*(1.0/(1.0-m)))))+((Area*C0)*(((Ud/(1.0-m))*(_d0_pow((1.0-(Vjo/Ud)),(1.0-m))*((-Vjo_C0/Ud))+_d1_pow((1.0-(Vjo/Ud)),(1.0-m))*(0.0)-_d0_pow((1.0-(Vj/Ud)),(1.0-m))*((-Vj_C0/Ud))+_d1_pow((1.0-(Vj/Ud)),(1.0-m))*(0.0)))+((_d0_pow((1.0-(VF/Ud)),(-m))*((-VF_C0/Ud))+_d1_pow((1.0-(VF/Ud)),(-m))*(0.0)*((U-Vj)+Vjo))+(_pow((1.0-(VF/Ud)),(-m))*((-Vj_C0)+Vjo_C0))))));
604 : 0 : charge_Ud=((Area*C0)*(((((1/(1.0-m))*(_pow((1.0-(Vjo/Ud)),(1.0-m))-_pow((1.0-(Vj/Ud)),(1.0-m))))+((Ud/(1.0-m))*(_d0_pow((1.0-(Vjo/Ud)),(1.0-m))*((-((Vjo_Ud*Ud)-Vjo)/(Ud*Ud)))+_d1_pow((1.0-(Vjo/Ud)),(1.0-m))*(0.0)-_d0_pow((1.0-(Vj/Ud)),(1.0-m))*((-((Vj_Ud*Ud)-Vj)/(Ud*Ud)))+_d1_pow((1.0-(Vj/Ud)),(1.0-m))*(0.0))))+((_d0_pow((1.0-(VF/Ud)),(-m))*((-((VF_Ud*Ud)-VF)/(Ud*Ud)))+_d1_pow((1.0-(VF/Ud)),(-m))*(0.0)*((U-Vj)+Vjo))+(_pow((1.0-(VF/Ud)),(-m))*((-Vj_Ud)+Vjo_Ud))))-((1.0/(1.0-m)))));
605 : 0 : charge_m=((Area*C0)*(((((-(Ud*(-1.0))/((1.0-m)*(1.0-m)))*(_pow((1.0-(Vjo/Ud)),(1.0-m))-_pow((1.0-(Vj/Ud)),(1.0-m))))+((Ud/(1.0-m))*(_d0_pow((1.0-(Vjo/Ud)),(1.0-m))*((-Vjo_m/Ud))+_d1_pow((1.0-(Vjo/Ud)),(1.0-m))*((-1.0))-_d0_pow((1.0-(Vj/Ud)),(1.0-m))*((-Vj_m/Ud))+_d1_pow((1.0-(Vj/Ud)),(1.0-m))*((-1.0)))))+((_d0_pow((1.0-(VF/Ud)),(-m))*((-VF_m/Ud))+_d1_pow((1.0-(VF/Ud)),(-m))*(0.0)*((U-Vj)+Vjo))+(_pow((1.0-(VF/Ud)),(-m))*((-Vj_m)+Vjo_m))))-(Ud*(-(-1.0)/((1.0-m)*(1.0-m))))));
606 : 0 : charge_Area=(((C0)*((((Ud/(1.0-m))*(_pow((1.0-(Vjo/Ud)),(1.0-m))-_pow((1.0-(Vj/Ud)),(1.0-m))))+(_pow((1.0-(VF/Ud)),(-m))*((U-Vj)+Vjo)))-(Ud*(1.0/(1.0-m)))))+((Area*C0)*(((Ud/(1.0-m))*(_d0_pow((1.0-(Vjo/Ud)),(1.0-m))*((-Vjo_Area/Ud))+_d1_pow((1.0-(Vjo/Ud)),(1.0-m))*(0.0)-_d0_pow((1.0-(Vj/Ud)),(1.0-m))*((-Vj_Area/Ud))+_d1_pow((1.0-(Vj/Ud)),(1.0-m))*(0.0)))+((_d0_pow((1.0-(VF/Ud)),(-m))*((-VF_Area/Ud))+_d1_pow((1.0-(VF/Ud)),(-m))*(0.0)*((U-Vj)+Vjo))+(_pow((1.0-(VF/Ud)),(-m))*((-Vj_Area)+Vjo_Area))))));
607 : 0 : charge=((Area*C0)*((((Ud/(1.0-m))*(_pow((1.0-(Vjo/Ud)),(1.0-m))-_pow((1.0-(Vj/Ud)),(1.0-m))))+(_pow((1.0-(VF/Ud)),(-m))*((U-Vj)+Vjo)))-(Ud*(1.0/(1.0-m)))));
608 : : }
609 : : }}
610 : 0 : return charge_U*d_U+charge_C0*d_C0+charge_Ud*d_Ud+charge_m*d_m+charge_Area*d_Area;
611 : : }
612 : :
613 : : /*
614 : : * analog function: Vceff
615 : : */
616 : 0 : double HBT_X_Vceff (double U, double VCES)
617 : : {
618 : 0 : double Vceff=0.0;
619 : 0 : double Vth0=0.0;
620 : 0 : {Vth0=0.025;
621 [ # # ]: 0 : if (U<VCES)
622 : 0 : Vceff=(Vth0+(Vth0*_logE((1.0+_exp((((U-VCES)/Vth0)-1.0))))));
623 : : else
624 : 0 : Vceff=((U-VCES)+(Vth0*_logE((1.0+_exp((1.0-((U-VCES)/Vth0)))))));
625 : : }
626 : 0 : return Vceff;
627 : : }
628 : 0 : double HBT_X_d_Vceff (double U, double VCES, double d_U, double d_VCES)
629 : : {
630 : 0 : double Vceff=0.0;
631 : 0 : double Vceff_U=0.0;
632 : 0 : double Vceff_VCES=0.0;
633 : 0 : double Vth0=0.0;
634 : 0 : double Vth0_U=0.0;
635 : 0 : double Vth0_VCES=0.0;
636 : 0 : {{Vth0_U=0.0;
637 : 0 : Vth0_VCES=0.0;
638 : 0 : Vth0=0.025;
639 : : }
640 [ # # ]: 0 : if (U<VCES)
641 : 0 : {Vceff_U=(Vth0_U+((Vth0_U*_logE((1.0+_exp((((U-VCES)/Vth0)-1.0)))))+(Vth0*_d0_logE((1.0+_exp((((U-VCES)/Vth0)-1.0))))*((+_d0_exp((((U-VCES)/Vth0)-1.0))*(((Vth0-((U-VCES)*Vth0_U))/(Vth0*Vth0))))))));
642 : 0 : Vceff_VCES=(Vth0_VCES+((Vth0_VCES*_logE((1.0+_exp((((U-VCES)/Vth0)-1.0)))))+(Vth0*_d0_logE((1.0+_exp((((U-VCES)/Vth0)-1.0))))*((+_d0_exp((((U-VCES)/Vth0)-1.0))*(((-1.0)*Vth0-(U-VCES)*Vth0_VCES)/(Vth0*Vth0)))))));
643 : 0 : Vceff=(Vth0+(Vth0*_logE((1.0+_exp((((U-VCES)/Vth0)-1.0))))));
644 : : }
645 : : else
646 : 0 : {Vceff_U=(1.0+((Vth0_U*_logE((1.0+_exp((1.0-((U-VCES)/Vth0))))))+(Vth0*_d0_logE((1.0+_exp((1.0-((U-VCES)/Vth0)))))*((+_d0_exp((1.0-((U-VCES)/Vth0)))*((-((Vth0-((U-VCES)*Vth0_U))/(Vth0*Vth0)))))))));
647 : 0 : Vceff_VCES=((-1.0)+((Vth0_VCES*_logE((1.0+_exp((1.0-((U-VCES)/Vth0))))))+(Vth0*_d0_logE((1.0+_exp((1.0-((U-VCES)/Vth0)))))*((+_d0_exp((1.0-((U-VCES)/Vth0)))*((-((-1.0)*Vth0-(U-VCES)*Vth0_VCES)/(Vth0*Vth0))))))));
648 : 0 : Vceff=((U-VCES)+(Vth0*_logE((1.0+_exp((1.0-((U-VCES)/Vth0)))))));
649 : : }
650 : : }
651 : 0 : return Vceff_U*d_U+Vceff_VCES*d_VCES;
652 : : }
653 : :
654 : : /*
655 : : * analog function: ICK
656 : : */
657 : 0 : double HBT_X_ICK (double U, double RCI0, double VLIM, double InvVPT, double VCES)
658 : : {
659 : 0 : double ICK=0.0;
660 : 0 : double VC=0.0;
661 : 0 : double x=0.0;
662 : 0 : {VC=HBT_X_Vceff(U,VCES);
663 : 0 : x=((VC-VLIM)*InvVPT);
664 : 0 : ICK=(((VC/RCI0)*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))*(1.0+((x+_sqrt(((x*x)+0.001)))/2.0)));
665 : : }
666 : 0 : return ICK;
667 : : }
668 : 0 : double HBT_X_d_ICK (double U, double RCI0, double VLIM, double InvVPT, double VCES, double d_U, double d_RCI0, double d_VLIM, double d_InvVPT, double d_VCES)
669 : : {
670 : 0 : double ICK=0.0;
671 : 0 : double ICK_U=0.0;
672 : 0 : double ICK_RCI0=0.0;
673 : 0 : double ICK_VLIM=0.0;
674 : 0 : double ICK_InvVPT=0.0;
675 : 0 : double ICK_VCES=0.0;
676 : 0 : double VC=0.0;
677 : 0 : double VC_U=0.0;
678 : 0 : double VC_RCI0=0.0;
679 : 0 : double VC_VLIM=0.0;
680 : 0 : double VC_InvVPT=0.0;
681 : 0 : double VC_VCES=0.0;
682 : 0 : double x=0.0;
683 : 0 : double x_U=0.0;
684 : 0 : double x_RCI0=0.0;
685 : 0 : double x_VLIM=0.0;
686 : 0 : double x_InvVPT=0.0;
687 : 0 : double x_VCES=0.0;
688 : 0 : {{VC_U=HBT_X_d_Vceff(U,VCES,(1.0),(0.0));
689 : 0 : VC_RCI0=HBT_X_d_Vceff(U,VCES,(0.0),(0.0));
690 : 0 : VC_VLIM=HBT_X_d_Vceff(U,VCES,(0.0),(0.0));
691 : 0 : VC_InvVPT=HBT_X_d_Vceff(U,VCES,(0.0),(0.0));
692 : 0 : VC_VCES=HBT_X_d_Vceff(U,VCES,(0.0),(1.0));
693 : 0 : VC=HBT_X_Vceff(U,VCES);
694 : : }
695 : 0 : {x_U=VC_U*InvVPT;
696 : 0 : x_RCI0=VC_RCI0*InvVPT;
697 : 0 : x_VLIM=(VC_VLIM-1.0)*InvVPT;
698 : 0 : x_InvVPT=(VC_InvVPT*InvVPT)+(VC-VLIM);
699 : 0 : x_VCES=VC_VCES*InvVPT;
700 : 0 : x=((VC-VLIM)*InvVPT);
701 : : }
702 : 0 : {ICK_U=((((VC_U/RCI0*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))+((VC/RCI0)*(-_d0_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))*((+((VC_U/VLIM*(VC/VLIM))+((VC/VLIM)*VC_U/VLIM))))/(_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))*_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))))*(1.0+((x+_sqrt(((x*x)+0.001)))/2.0)))+(((VC/RCI0)*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))*(+(x_U+_d0_sqrt(((x*x)+0.001))*(((x_U*x)+(x*x_U))))/2.0)));
703 : 0 : ICK_RCI0=((((((VC_RCI0*RCI0)-VC)/(RCI0*RCI0)*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))+((VC/RCI0)*(-_d0_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))*((+((VC_RCI0/VLIM*(VC/VLIM))+((VC/VLIM)*VC_RCI0/VLIM))))/(_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))*_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))))*(1.0+((x+_sqrt(((x*x)+0.001)))/2.0)))+(((VC/RCI0)*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))*(+(x_RCI0+_d0_sqrt(((x*x)+0.001))*(((x_RCI0*x)+(x*x_RCI0))))/2.0)));
704 : 0 : ICK_VLIM=((((VC_VLIM/RCI0*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))+((VC/RCI0)*(-_d0_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))*((+((((VC_VLIM*VLIM)-VC)/(VLIM*VLIM)*(VC/VLIM))+((VC/VLIM)*((VC_VLIM*VLIM)-VC)/(VLIM*VLIM)))))/(_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))*_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))))*(1.0+((x+_sqrt(((x*x)+0.001)))/2.0)))+(((VC/RCI0)*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))*(+(x_VLIM+_d0_sqrt(((x*x)+0.001))*(((x_VLIM*x)+(x*x_VLIM))))/2.0)));
705 : 0 : ICK_InvVPT=((((VC_InvVPT/RCI0*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))+((VC/RCI0)*(-_d0_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))*((+((VC_InvVPT/VLIM*(VC/VLIM))+((VC/VLIM)*VC_InvVPT/VLIM))))/(_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))*_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))))*(1.0+((x+_sqrt(((x*x)+0.001)))/2.0)))+(((VC/RCI0)*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))*(+(x_InvVPT+_d0_sqrt(((x*x)+0.001))*(((x_InvVPT*x)+(x*x_InvVPT))))/2.0)));
706 : 0 : ICK_VCES=((((VC_VCES/RCI0*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))+((VC/RCI0)*(-_d0_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))*((+((VC_VCES/VLIM*(VC/VLIM))+((VC/VLIM)*VC_VCES/VLIM))))/(_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))*_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))))*(1.0+((x+_sqrt(((x*x)+0.001)))/2.0)))+(((VC/RCI0)*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))*(+(x_VCES+_d0_sqrt(((x*x)+0.001))*(((x_VCES*x)+(x*x_VCES))))/2.0)));
707 : 0 : ICK=(((VC/RCI0)*(1.0/_sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))*(1.0+((x+_sqrt(((x*x)+0.001)))/2.0)));
708 : : }
709 : : }
710 : 0 : return ICK_U*d_U+ICK_RCI0*d_RCI0+ICK_VLIM*d_VLIM+ICK_InvVPT*d_InvVPT+ICK_VCES*d_VCES;
711 : : }
|