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

           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                 :            : }

Generated by: LCOV version 1.11