49 #ifndef Xyce_N_DEV_ADMSHBT_X_h
50 #define Xyce_N_DEV_ADMSHBT_X_h
72 static const char *
name() {
return "FBH HBT_X v2.1";}
120 void registerLIDs(
const std::vector<int> & intLIDVecRef,
121 const std::vector<int> & extLIDVecRef );
127 const std::vector< std::vector<int> > &
jacobianStamp()
const;
128 void registerJacLIDs(
const std::vector< std::vector<int> > & jacLIDVec );
151 template <
typename T>
157 return (exp(80.0)*(x-79.0));
401 static std::vector< std::vector<int> >
jacMap2;
412 template<
typename ScalarT> ScalarT
exp_soft(ScalarT x)
421 maxarg = log(maxexp);
428 exp_soft = (((x+1.0)-maxarg)*maxexp);
436 template<
typename RetScalarT,
typename Arg1ScalarT,
typename Arg2ScalarT> RetScalarT
Vt(Arg1ScalarT U, Arg2ScalarT Ud)
450 Vt = (U-(Vch*log((1.0+exp(exparg)))));
455 Vt = (VF-(Vch*log((1.0+exp(exparg)))));
463 template<
typename RetScalarT,
typename Arg1ScalarT,
typename Arg3ScalarT,
typename Arg4ScalarT,
typename Arg6ScalarT>
464 RetScalarT
diode(Arg1ScalarT U,
double Is, Arg3ScalarT Ug, Arg4ScalarT N,
double AREA, Arg6ScalarT TJ,
double TNOM)
477 Arg6ScalarT TJM_arg1;
483 KDURCHQ = 0.861708692e-4;
484 lnIs = log((Is*AREA));
486 if (((maxi<(Ug/VTHNOM))&&(U<0.0)))
488 Tmax = (((Ug*VTHNOM)/((Ug-(maxi*VTHNOM))*KDURCHQ))-273.15);
489 TJM = Vt<Arg6ScalarT>(TJ,Tmax);
499 exparg1=((((U/(N*VTHJ))+(Ug/VTHNOM))-(Ug/VTHJ))+lnIs);
500 exparg2=(((Ug/VTHNOM)-(Ug/VTHJ))+lnIs);
505 exparg1=((U/(N*VTH0))+lnIs);
506 diode = (
exp_soft(exparg1)-(Is*AREA));
514 template<
typename ScalarT> ScalarT
MM(ScalarT VBCI, ScalarT VCBO, ScalarT MC, ScalarT VCBLIN, ScalarT BF, ScalarT KC)
522 if ((((KC>0.0)&&(MC>0.0))&&(VCBO>0.0)))
532 if ((VBCI>(-VCBLIN)))
536 MM = (1.0/(1.0-(vcbi/(-VCBO))));
540 MM = (1.0/(1.0-pow((vcbi/(-VCBO)),MC)));
545 if ((VBCI<=(-VCBLIN)))
549 MM = ((1.0/(1.0-FBD))-((((1.0/VCBO)*1.0)/pow((1.0-FBD),2.0))*(vcbi+(FBD*VCBO))));
553 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))));
569 template<
typename RetScalarT> RetScalarT
charge(RetScalarT U,
double C0,
double Ud,
double m,
double Area)
578 Vj = Vt<RetScalarT>(U,Ud);
579 Vjo = Vt<double>(0.0,Ud);
583 charge = ((Area*C0)*((Ud*(log((1.0-(Vjo/Ud)))-log((1.0-(Vj/Ud)))))+((1.0/(1.0-(VF/Ud)))*((U-Vj)+Vjo))));
587 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)))));
595 template<
typename ScalarT> ScalarT
Vceff(ScalarT U, ScalarT VCES)
605 Vceff = (Vth0+(Vth0*log((1.0+exp((((U-VCES)/Vth0)-1.0))))));
609 Vceff = ((U-VCES)+(Vth0*log((1.0+exp((1.0-((U-VCES)/Vth0)))))));
617 template<
typename ScalarT> ScalarT
ICK(ScalarT U, ScalarT RCI0, ScalarT VLIM, ScalarT InvVPT, ScalarT VCES)
626 x = ((VC-VLIM)*InvVPT);
627 ICK = (((VC/RCI0)*(1.0/sqrt((1.0+((VC/VLIM)*(VC/VLIM))))))*(1.0+((x+sqrt(((x*x)+0.001)))/2.0)));
778 #endif //Xyce_N_DEV_ADMSHBT_X_h