clear separation between geometry and temperature scaling
This commit is contained in:
parent
90ab76d876
commit
4bb09b35c3
|
|
@ -214,13 +214,13 @@ HICUMask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFval
|
||||||
value->rValue = here->HICUMcapjei + here->HICUMcapdeix;
|
value->rValue = here->HICUMcapjei + here->HICUMcapdeix;
|
||||||
return(OK);
|
return(OK);
|
||||||
case HICUM_QUEST_CPIX:
|
case HICUM_QUEST_CPIX:
|
||||||
value->rValue = here->HICUMcapjep + here->HICUMcbepar;
|
value->rValue = here->HICUMcapjep + here->HICUMcbepar_scaled;
|
||||||
return(OK);
|
return(OK);
|
||||||
case HICUM_QUEST_CMUI:
|
case HICUM_QUEST_CMUI:
|
||||||
value->rValue = here->HICUMcapjci + here->HICUMcapdci;
|
value->rValue = here->HICUMcapjci + here->HICUMcapdci;
|
||||||
return(OK);
|
return(OK);
|
||||||
case HICUM_QUEST_CMUX:
|
case HICUM_QUEST_CMUX:
|
||||||
value->rValue = here->HICUMcapjcx_t_i + here->HICUMcapjcx_t_ii + here->HICUMcbcpar + here->HICUMcapdsu;
|
value->rValue = here->HICUMcapjcx_t_i + here->HICUMcapjcx_t_ii + here->HICUMcbcpar_scaled + here->HICUMcapdsu;
|
||||||
return(OK);
|
return(OK);
|
||||||
case HICUM_QUEST_CCS:
|
case HICUM_QUEST_CCS:
|
||||||
value->rValue = here->HICUMcapjs + here->HICUMcapscp;
|
value->rValue = here->HICUMcapjs + here->HICUMcapscp;
|
||||||
|
|
|
||||||
|
|
@ -140,16 +140,31 @@ typedef struct sHICUMinstance {
|
||||||
dual_double HICUMvds_t;
|
dual_double HICUMvds_t;
|
||||||
dual_double HICUMvpts_t;
|
dual_double HICUMvpts_t;
|
||||||
|
|
||||||
//model variables that depend on "area" and "m" and are needed in load
|
//model variables that depend on "area" and "m" and are needed in temp
|
||||||
|
double HICUMqp0_scaled;
|
||||||
|
double HICUMc10_scaled;
|
||||||
|
double HICUMicbar_scaled;
|
||||||
|
double HICUMrth_scaled;
|
||||||
|
double HICUMcth_scaled;
|
||||||
|
double HICUMcjei0_scaled;
|
||||||
|
double HICUMibeis_scaled;
|
||||||
|
double HICUMireis_scaled;
|
||||||
|
double HICUMibeps_scaled;
|
||||||
|
double HICUMireps_scaled;
|
||||||
|
double HICUMcjep0_scaled;
|
||||||
|
double HICUMcbepar_scaled;
|
||||||
|
double HICUMibets_scaled;
|
||||||
|
double HICUMibcis_scaled;
|
||||||
double HICUMcjci0_scaled;
|
double HICUMcjci0_scaled;
|
||||||
double HICUMcjcx0_scaled;
|
double HICUMcjcx0_scaled;
|
||||||
double HICUMicbar_scaled;
|
|
||||||
double HICUMcbepar_scaled;
|
|
||||||
double HICUMcbcpar_scaled;
|
double HICUMcbcpar_scaled;
|
||||||
double HICUMcth_scaled;
|
double HICUMibcxs_scaled;
|
||||||
double HICUMrth_scaled;
|
double HICUMqavl_scaled;
|
||||||
|
double HICUMre_scaled;
|
||||||
double HICUMrci0_scaled;
|
double HICUMrci0_scaled;
|
||||||
double HICUMibets_scaled;
|
double HICUMrbx_scaled;
|
||||||
|
double HICUMrcx_scaled;
|
||||||
|
double HICUMrbi0_scaled;
|
||||||
|
|
||||||
double HICUMrbi;
|
double HICUMrbi;
|
||||||
double HICUMiavl;
|
double HICUMiavl;
|
||||||
|
|
@ -158,9 +173,6 @@ typedef struct sHICUMinstance {
|
||||||
double HICUMtf;
|
double HICUMtf;
|
||||||
double HICUMick;
|
double HICUMick;
|
||||||
|
|
||||||
double HICUMcbepar;
|
|
||||||
double HICUMcbcpar;
|
|
||||||
|
|
||||||
double *HICUMcollCollPtr; /* pointer to sparse matrix at
|
double *HICUMcollCollPtr; /* pointer to sparse matrix at
|
||||||
* (collector,collector) */
|
* (collector,collector) */
|
||||||
double *HICUMbaseBasePtr; /* pointer to sparse matrix at
|
double *HICUMbaseBasePtr; /* pointer to sparse matrix at
|
||||||
|
|
|
||||||
|
|
@ -498,6 +498,63 @@ HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||||
here->HICUMdtemp = 0.0;
|
here->HICUMdtemp = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Warning:
|
||||||
|
// The scaling with HICUMm and HICUMarea is done here from model to here variables in order to save memory.
|
||||||
|
// Classical spice scaling with "area" is implemented, but it is not recommended to be used. If you want
|
||||||
|
// scaling, more sophisticated expressions should be used. Those can be found in modern PDKs or should be
|
||||||
|
// provided by modeling engineers.
|
||||||
|
// For discrete devices, the multiplication factor "m" should give reasonable results.
|
||||||
|
//
|
||||||
|
// The HICUMm device multiplicaton factor can be exected to give good results.
|
||||||
|
// The following variables need scaling in HICUM:
|
||||||
|
// IT : qp0 ~ (area m)**2 qp0 ~ area m icbar ~ area m
|
||||||
|
// BE junction: cjei0 ~ area m cjep0 ~ m
|
||||||
|
// ibeis ~ area m ibeps ~ m
|
||||||
|
// cbepar ~ m -> area scaling not reasonable
|
||||||
|
// BC junction: cjci0 ~ area m cjcx0 ~ m
|
||||||
|
// ibcis ~ area m ibcxs ~ m
|
||||||
|
// ireis ~ area m ireps ~ m
|
||||||
|
// cbcpar ~ m -> area scaling not reasonable
|
||||||
|
// qavl ~ area m
|
||||||
|
// re ~1/(area*m)
|
||||||
|
// rci0 ~1/(area*m)
|
||||||
|
// rbx ~1/(area*m) -> assume that scaling with "area" is due to lE0 increase
|
||||||
|
// rcx ~1/(area*m) -> assume that scaling with "area" is due to lE0 increase
|
||||||
|
// rbi0 ~1/(area*m) -> assume that scaling with "area" is due to lE0 increase
|
||||||
|
// rth ~1/(area*m) -> bad assumption, but more transistor geometry needs to be known for accurate scaling
|
||||||
|
// cth ~ area*m -> bad assumption, but more transistor geometry needs to be known for accurate scaling
|
||||||
|
// Substrate related parameters not scaled on purpose. This is very geometry dependent?
|
||||||
|
|
||||||
|
double area_times_m = here->HICUMm*here->HICUMarea;
|
||||||
|
//IT
|
||||||
|
here->HICUMqp0_scaled = model->HICUMqp0 * area_times_m;
|
||||||
|
here->HICUMc10_scaled = model->HICUMc10 * area_times_m*area_times_m;
|
||||||
|
here->HICUMicbar_scaled = model->HICUMicbar * area_times_m;
|
||||||
|
here->HICUMrth_scaled = model->HICUMrth / area_times_m; //very poor assumption
|
||||||
|
here->HICUMcth_scaled = model->HICUMcth * area_times_m; //very poor assumption
|
||||||
|
//BE junction
|
||||||
|
here->HICUMcjei0_scaled = model->HICUMcjei0 * area_times_m;
|
||||||
|
here->HICUMibeis_scaled = model->HICUMibeis * area_times_m;
|
||||||
|
here->HICUMireis_scaled = model->HICUMireis * area_times_m;
|
||||||
|
here->HICUMibeps_scaled = model->HICUMibeps * here->HICUMm;
|
||||||
|
here->HICUMireps_scaled = model->HICUMireps * here->HICUMm;
|
||||||
|
here->HICUMcjep0_scaled = model->HICUMcjep0 * here->HICUMm;
|
||||||
|
here->HICUMcbepar_scaled = model->HICUMcbepar * here->HICUMm;
|
||||||
|
here->HICUMibets_scaled = model->HICUMibets * area_times_m;
|
||||||
|
//BC junction
|
||||||
|
here->HICUMibcis_scaled = model->HICUMibcis * area_times_m;
|
||||||
|
here->HICUMcjci0_scaled = model->HICUMcjci0 * area_times_m;
|
||||||
|
here->HICUMcjcx0_scaled = model->HICUMcjcx0 * here->HICUMm;
|
||||||
|
here->HICUMcbcpar_scaled = model->HICUMcbcpar * here->HICUMm;
|
||||||
|
here->HICUMibcxs_scaled = model->HICUMibcxs * here->HICUMm;
|
||||||
|
here->HICUMqavl_scaled = model->HICUMqavl * area_times_m;
|
||||||
|
//resistances
|
||||||
|
here->HICUMre_scaled = model->HICUMre / area_times_m;
|
||||||
|
here->HICUMrci0_scaled = model->HICUMrci0 / area_times_m;
|
||||||
|
here->HICUMrbx_scaled = model->HICUMrbx / area_times_m;
|
||||||
|
here->HICUMrcx_scaled = model->HICUMrcx / area_times_m;
|
||||||
|
here->HICUMrbi0_scaled = model->HICUMrbi0 / area_times_m;
|
||||||
|
|
||||||
here->HICUMstate = *states;
|
here->HICUMstate = *states;
|
||||||
*states += HICUMnumStates;
|
*states += HICUMnumStates;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1196,31 +1196,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
for (; model != NULL; model = HICUMnextModel(model)) {
|
for (; model != NULL; model = HICUMnextModel(model)) {
|
||||||
|
|
||||||
// Model_initialization
|
// Model_initialization
|
||||||
int selfheat = ((model->HICUMflsh > 0) && (model->HICUMrthGiven) && (here->HICUMrth_scaled > 0.0));
|
int selfheat = ((model->HICUMflsh > 0) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
||||||
int nqs = ((model->HICUMflnqs != 0 || model->HICUMflcomp == 0.0 || model->HICUMflcomp == 2.1) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
|
int nqs = ((model->HICUMflnqs != 0 || model->HICUMflcomp == 0.0 || model->HICUMflcomp == 2.1) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
|
||||||
|
|
||||||
// Depletion capacitance splitting at b-c junction
|
|
||||||
// Capacitances at peripheral and external base node
|
|
||||||
C_1 = (1.0 - model->HICUMfbcpar) *
|
|
||||||
(here->HICUMcjcx0_scaled + here->HICUMcbcpar_scaled);
|
|
||||||
if (C_1 >= here->HICUMcbcpar_scaled) {
|
|
||||||
cbcpar1 = here->HICUMcbcpar_scaled;
|
|
||||||
cbcpar2 = 0.0;
|
|
||||||
//cjcx01 = C_1 - here->HICUMcbcpar_scaled;
|
|
||||||
//cjcx02 = model->HICUMcjcx0_scaled - cjcx01; //not needed herein
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
cbcpar1 = C_1;
|
|
||||||
cbcpar2 = here->HICUMcbcpar_scaled - cbcpar1;
|
|
||||||
//cjcx01 = 0.0;
|
|
||||||
//cjcx02 = model->HICUMcjcx0_scaled; //not needed herein
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parasitic b-e capacitance partitioning: No temperature dependence
|
|
||||||
cbepar2 = model->HICUMfbepar * here->HICUMcbepar_scaled;
|
|
||||||
cbepar1 = here->HICUMcbepar_scaled - cbepar2;
|
|
||||||
|
|
||||||
|
|
||||||
// Avoid divide-by-zero and define infinity other way
|
// Avoid divide-by-zero and define infinity other way
|
||||||
// High current correction for 2D and 3D effects
|
// High current correction for 2D and 3D effects
|
||||||
if (model->HICUMich != 0.0) {
|
if (model->HICUMich != 0.0) {
|
||||||
|
|
@ -1239,7 +1217,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turn avalanche calculation on depending of parameters
|
// Turn avalanche calculation on depending of parameters
|
||||||
if ((model->HICUMfavl > 0.0) && (here->HICUMcjci0_scaled > 0.0)) {
|
if ((model->HICUMfavl > 0.0) && (model->HICUMcjci0 > 0.0)) {
|
||||||
use_aval = 1;
|
use_aval = 1;
|
||||||
} else {
|
} else {
|
||||||
use_aval = 0;
|
use_aval = 0;
|
||||||
|
|
@ -1251,6 +1229,27 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
for (here = HICUMinstances(model); here != NULL ;
|
for (here = HICUMinstances(model); here != NULL ;
|
||||||
here=HICUMnextInstance(here)) {
|
here=HICUMnextInstance(here)) {
|
||||||
|
|
||||||
|
// Depletion capacitance splitting at b-c junction
|
||||||
|
// Capacitances at peripheral and external base node
|
||||||
|
C_1 = (1.0 - model->HICUMfbcpar) *
|
||||||
|
(here->HICUMcjcx0_scaled + here->HICUMcbcpar_scaled);
|
||||||
|
if (C_1 >= here->HICUMcbcpar_scaled) {
|
||||||
|
cbcpar1 = here->HICUMcbcpar_scaled;
|
||||||
|
cbcpar2 = 0.0;
|
||||||
|
//cjcx01 = C_1 - here->HICUMcbcpar_scaled;
|
||||||
|
//cjcx02 = model->HICUMcjcx0_scaled - cjcx01; //not needed herein
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cbcpar1 = C_1;
|
||||||
|
cbcpar2 = here->HICUMcbcpar_scaled - cbcpar1;
|
||||||
|
//cjcx01 = 0.0;
|
||||||
|
//cjcx02 = model->HICUMcjcx0_scaled; //not needed herein
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parasitic b-e capacitance partitioning: No temperature dependence
|
||||||
|
cbepar2 = model->HICUMfbepar * here->HICUMcbepar_scaled;
|
||||||
|
cbepar1 = here->HICUMcbepar_scaled - cbepar2;
|
||||||
|
|
||||||
gqbepar1 = 0.0;
|
gqbepar1 = 0.0;
|
||||||
gqbepar2 = 0.0;
|
gqbepar2 = 0.0;
|
||||||
gqbcpar1 = 0.0;
|
gqbcpar1 = 0.0;
|
||||||
|
|
@ -1258,10 +1257,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
gqsu = 0.0;
|
gqsu = 0.0;
|
||||||
Icth = 0.0, Icth_Vrth = 0.0;
|
Icth = 0.0, Icth_Vrth = 0.0;
|
||||||
|
|
||||||
// Markus: What is this ?
|
|
||||||
here->HICUMcbepar = here->HICUMcbepar_scaled;
|
|
||||||
here->HICUMcbcpar = here->HICUMcbcpar_scaled;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* initialization
|
* initialization
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -140,104 +140,8 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
double Tnom, zetatef, cjcx01, cjcx02, C_1;
|
double Tnom, zetatef, cjcx01, cjcx02, C_1;
|
||||||
duals::duald cjei0_t, vdei_t, cjep0_t, vdep_t;
|
duals::duald cjei0_t, vdei_t, cjep0_t, vdep_t;
|
||||||
|
|
||||||
//variable for area and m scaling
|
|
||||||
double area_times_m;
|
|
||||||
double qp0_scaled ;
|
|
||||||
double c10_scaled ;
|
|
||||||
double icbar_scaled;
|
|
||||||
double cjei0_scaled;
|
|
||||||
double ibeis_scaled;
|
|
||||||
double ireis_scaled;
|
|
||||||
double ibeps_scaled;
|
|
||||||
double ibcxs_scaled;
|
|
||||||
double ireps_scaled;
|
|
||||||
double cjep0_scaled;
|
|
||||||
double cbepar_scaled;
|
|
||||||
double ibcis_scaled;
|
|
||||||
double cjci0_scaled;
|
|
||||||
double cjcx0_scaled;
|
|
||||||
double cbcpar_scaled;
|
|
||||||
double qavl_scaled ;
|
|
||||||
double re_scaled ;
|
|
||||||
double rci0_scaled ;
|
|
||||||
double rbx_scaled ;
|
|
||||||
double rcx_scaled ;
|
|
||||||
double rbi0_scaled ;
|
|
||||||
double rth_scaled ;
|
|
||||||
double cth_scaled ;
|
|
||||||
double ibets_scaled ;
|
|
||||||
|
|
||||||
// double cjci0_t, vdci_t, vptci_t, cjep0_t, vdep_t, ajep_t, vdcx_t, vptcx_t, cscp0_t, vdsp_t, vptsp_t, cjs0_t, vds_t, vpts_t;
|
// double cjci0_t, vdci_t, vptci_t, cjep0_t, vdep_t, ajep_t, vdcx_t, vptcx_t, cscp0_t, vdsp_t, vptsp_t, cjs0_t, vds_t, vpts_t;
|
||||||
|
|
||||||
// Warning:
|
|
||||||
// The scaling with HICUMm and HICUMarea is done here from model to here variables in order to save memory.
|
|
||||||
// Classical spice scaling with "area" is implemented, but it is not recommended to be used. If you want
|
|
||||||
// scaling, more sophisticated expressions should be used. Those can be found in modern PDKs or should be
|
|
||||||
// provided by modeling engineers.
|
|
||||||
// For discrete devices, the multiplication factor "m" should give reasonable results.
|
|
||||||
//
|
|
||||||
// The HICUMm device multiplicaton factor can be exected to give good results.
|
|
||||||
// The following variables need scaling in HICUM:
|
|
||||||
// IT : qp0 ~ (area m)**2 qp0 ~ area m icbar ~ area m
|
|
||||||
// BE junction: cjei0 ~ area m cjep0 ~ m
|
|
||||||
// ibeis ~ area m ibeps ~ m
|
|
||||||
// cbepar ~ m -> area scaling not reasonable
|
|
||||||
// BC junction: cjci0 ~ area m cjcx0 ~ m
|
|
||||||
// ibcis ~ area m ibcxs ~ m
|
|
||||||
// ireis ~ area m ireps ~ m
|
|
||||||
// cbcpar ~ m -> area scaling not reasonable
|
|
||||||
// qavl ~ area m
|
|
||||||
// re ~1/(area*m)
|
|
||||||
// rci0 ~1/(area*m)
|
|
||||||
// rbx ~1/(area*m) -> assume that scaling with "area" is due to lE0 increase
|
|
||||||
// rcx ~1/(area*m) -> assume that scaling with "area" is due to lE0 increase
|
|
||||||
// rbi0 ~1/(area*m) -> assume that scaling with "area" is due to lE0 increase
|
|
||||||
// rth ~1/(area*m) -> bad assumption, but more transistor geometry needs to be known for accurate scaling
|
|
||||||
// cth ~ area*m -> bad assumption, but more transistor geometry needs to be known for accurate scaling
|
|
||||||
// Substrate related parameters not scaled on purpose. This is very geometry dependent?
|
|
||||||
|
|
||||||
area_times_m = here->HICUMm*here->HICUMarea;
|
|
||||||
//IT
|
|
||||||
qp0_scaled = model->HICUMqp0 * area_times_m;
|
|
||||||
c10_scaled = model->HICUMc10 * area_times_m*area_times_m;
|
|
||||||
icbar_scaled = model->HICUMicbar * area_times_m;
|
|
||||||
rth_scaled = model->HICUMrth / area_times_m; //very poor assumption
|
|
||||||
cth_scaled = model->HICUMcth * area_times_m; //very poor assumption
|
|
||||||
//BE junction
|
|
||||||
cjei0_scaled = model->HICUMcjei0 * area_times_m;
|
|
||||||
ibeis_scaled = model->HICUMibeis * area_times_m;
|
|
||||||
ireis_scaled = model->HICUMireis * area_times_m;
|
|
||||||
ibeps_scaled = model->HICUMibeps * here->HICUMm;
|
|
||||||
ireps_scaled = model->HICUMireps * here->HICUMm;
|
|
||||||
cjep0_scaled = model->HICUMcjep0 * here->HICUMm;
|
|
||||||
cbepar_scaled = model->HICUMcbepar * here->HICUMm;
|
|
||||||
ibets_scaled = model->HICUMibets * area_times_m;
|
|
||||||
//BC junction
|
|
||||||
ibcis_scaled = model->HICUMibcis * area_times_m;
|
|
||||||
cjci0_scaled = model->HICUMcjci0 * area_times_m;
|
|
||||||
cjcx0_scaled = model->HICUMcjcx0 * here->HICUMm;
|
|
||||||
cbcpar_scaled = model->HICUMcbcpar * here->HICUMm;
|
|
||||||
ibcxs_scaled = model->HICUMibcxs * here->HICUMm;
|
|
||||||
qavl_scaled = model->HICUMqavl * area_times_m;
|
|
||||||
//resistances
|
|
||||||
re_scaled = model->HICUMre / area_times_m;
|
|
||||||
rci0_scaled = model->HICUMrci0 / area_times_m;
|
|
||||||
rbx_scaled = model->HICUMrbx / area_times_m;
|
|
||||||
rcx_scaled = model->HICUMrcx / area_times_m;
|
|
||||||
rbi0_scaled = model->HICUMrbi0 / area_times_m;
|
|
||||||
|
|
||||||
// These model variables depend on on scale.
|
|
||||||
// They are put into the here struct for usage in load routine.
|
|
||||||
here->HICUMicbar_scaled = icbar_scaled;
|
|
||||||
here->HICUMcbepar_scaled = cbepar_scaled;
|
|
||||||
here->HICUMcbcpar_scaled = cbcpar_scaled;
|
|
||||||
here->HICUMcth_scaled = cth_scaled;
|
|
||||||
here->HICUMibets_scaled = ibets_scaled;
|
|
||||||
here->HICUMrci0_scaled = rci0_scaled;
|
|
||||||
here->HICUMrth_scaled = rth_scaled;
|
|
||||||
here->HICUMcjcx0_scaled = cjcx0_scaled;
|
|
||||||
here->HICUMcjci0_scaled = cjci0_scaled;
|
|
||||||
|
|
||||||
Tnom = model->HICUMtnom;
|
Tnom = model->HICUMtnom;
|
||||||
k10 = model->HICUMf1vg*Tnom*log(Tnom);
|
k10 = model->HICUMf1vg*Tnom*log(Tnom);
|
||||||
k20 = model->HICUMf2vg*Tnom;
|
k20 = model->HICUMf2vg*Tnom;
|
||||||
|
|
@ -280,12 +184,12 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
vgbe_t = (vgb_t+vge_t)/2;
|
vgbe_t = (vgb_t+vge_t)/2;
|
||||||
|
|
||||||
here->HICUMtVcrit = here->HICUMvt.rpart *
|
here->HICUMtVcrit = here->HICUMvt.rpart *
|
||||||
log(here->HICUMvt.rpart / (CONSTroot2*ibeis_scaled*here->HICUMarea*here->HICUMm));
|
log(here->HICUMvt.rpart / (CONSTroot2*here->HICUMibeis_scaled));
|
||||||
|
|
||||||
//Internal b-e junction capacitance
|
//Internal b-e junction capacitance
|
||||||
// TMPHICJ(here->HICUMvt0,here->HICUMvt,here->HICUMqtt0,here->HICUMln_qtt0,here->HICUMmg,cjei0_scaled,model->HICUMvdei,model->HICUMzei,model->HICUMajei,1,vgbe0,&here->HICUMcjei0_t,&here->HICUMvdei_t,&here->HICUMajei_t);
|
// TMPHICJ(here->HICUMvt0,here->HICUMvt,here->HICUMqtt0,here->HICUMln_qtt0,here->HICUMmg,cjei0_scaled,model->HICUMvdei,model->HICUMzei,model->HICUMajei,1,vgbe0,&here->HICUMcjei0_t,&here->HICUMvdei_t,&here->HICUMajei_t);
|
||||||
hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg,
|
hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg,
|
||||||
cjei0_scaled, model->HICUMvdei, model->HICUMzei, model->HICUMajei, 1, vgbe0,
|
here->HICUMcjei0_scaled, model->HICUMvdei, model->HICUMzei, model->HICUMajei, 1, vgbe0,
|
||||||
&here->HICUMcjei0_t.rpart, &here->HICUMvdei_t.rpart, &here->HICUMajei_t.rpart,
|
&here->HICUMcjei0_t.rpart, &here->HICUMvdei_t.rpart, &here->HICUMajei_t.rpart,
|
||||||
&here->HICUMcjei0_t.dpart, &here->HICUMvdei_t.dpart, &here->HICUMajei_t.dpart);
|
&here->HICUMcjei0_t.dpart, &here->HICUMvdei_t.dpart, &here->HICUMajei_t.dpart);
|
||||||
cjei0_t.rpart(here->HICUMcjei0_t.rpart);
|
cjei0_t.rpart(here->HICUMcjei0_t.rpart);
|
||||||
|
|
@ -299,33 +203,33 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
r_VgVT = V_gT/vt;
|
r_VgVT = V_gT/vt;
|
||||||
//Internal b-e diode saturation currents
|
//Internal b-e diode saturation currents
|
||||||
a = model->HICUMmcf*r_VgVT/model->HICUMmbei - model->HICUMalb*dT;
|
a = model->HICUMmcf*r_VgVT/model->HICUMmbei - model->HICUMalb*dT;
|
||||||
a = ibeis_scaled*exp(a);
|
a = here->HICUMibeis_scaled*exp(a);
|
||||||
here->HICUMibeis_t.rpart = a.rpart();
|
here->HICUMibeis_t.rpart = a.rpart();
|
||||||
here->HICUMibeis_t.dpart = a.dpart();
|
here->HICUMibeis_t.dpart = a.dpart();
|
||||||
|
|
||||||
a = model->HICUMmcf*r_VgVT/model->HICUMmrei - model->HICUMalb*dT;
|
a = model->HICUMmcf*r_VgVT/model->HICUMmrei - model->HICUMalb*dT;
|
||||||
a = ireis_scaled*exp(a);
|
a = here->HICUMireis_scaled*exp(a);
|
||||||
here->HICUMireis_t.rpart = a.rpart();
|
here->HICUMireis_t.rpart = a.rpart();
|
||||||
here->HICUMireis_t.dpart = a.dpart();
|
here->HICUMireis_t.dpart = a.dpart();
|
||||||
|
|
||||||
//Peripheral b-e diode saturation currents
|
//Peripheral b-e diode saturation currents
|
||||||
a = model->HICUMmcf*r_VgVT/model->HICUMmbep - model->HICUMalb*dT;
|
a = model->HICUMmcf*r_VgVT/model->HICUMmbep - model->HICUMalb*dT;
|
||||||
a = ibeps_scaled*exp(a);
|
a = here->HICUMibeps_scaled*exp(a);
|
||||||
here->HICUMibeps_t.rpart = a.rpart();
|
here->HICUMibeps_t.rpart = a.rpart();
|
||||||
here->HICUMibeps_t.dpart = a.dpart();
|
here->HICUMibeps_t.dpart = a.dpart();
|
||||||
|
|
||||||
a = model->HICUMmcf*r_VgVT/model->HICUMmrep - model->HICUMalb*dT;
|
a = model->HICUMmcf*r_VgVT/model->HICUMmrep - model->HICUMalb*dT;
|
||||||
a = ireps_scaled*exp(a);
|
a = here->HICUMireps_scaled*exp(a);
|
||||||
here->HICUMireps_t.rpart = a.rpart();
|
here->HICUMireps_t.rpart = a.rpart();
|
||||||
here->HICUMireps_t.dpart = a.dpart();
|
here->HICUMireps_t.dpart = a.dpart();
|
||||||
//Internal b-c diode saturation current
|
//Internal b-c diode saturation current
|
||||||
a = r_VgVT/model->HICUMmbci;
|
a = r_VgVT/model->HICUMmbci;
|
||||||
a = ibcis_scaled*exp(a);
|
a = here->HICUMibcis_scaled*exp(a);
|
||||||
here->HICUMibcis_t.rpart = a.rpart();
|
here->HICUMibcis_t.rpart = a.rpart();
|
||||||
here->HICUMibcis_t.dpart = a.dpart();
|
here->HICUMibcis_t.dpart = a.dpart();
|
||||||
//External b-c diode saturation currents
|
//External b-c diode saturation currents
|
||||||
a = r_VgVT/model->HICUMmbcx;
|
a = r_VgVT/model->HICUMmbcx;
|
||||||
a = ibcxs_scaled*exp(a);
|
a = here->HICUMibcxs_scaled*exp(a);
|
||||||
here->HICUMibcxs_t.rpart = a.rpart();
|
here->HICUMibcxs_t.rpart = a.rpart();
|
||||||
here->HICUMibcxs_t.dpart = a.dpart();
|
here->HICUMibcxs_t.dpart = a.dpart();
|
||||||
//Saturation transfer current for substrate transistor
|
//Saturation transfer current for substrate transistor
|
||||||
|
|
@ -340,7 +244,7 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
here->HICUMiscs_t.dpart = a.dpart();
|
here->HICUMiscs_t.dpart = a.dpart();
|
||||||
//Zero bias hole charge
|
//Zero bias hole charge
|
||||||
a = vdei_t/model->HICUMvdei;
|
a = vdei_t/model->HICUMvdei;
|
||||||
a = qp0_scaled*(1.0+0.5*model->HICUMzei*(1.0-a));
|
a = here->HICUMqp0_scaled*(1.0+0.5*model->HICUMzei*(1.0-a));
|
||||||
here->HICUMqp0_t.rpart = a.rpart();
|
here->HICUMqp0_t.rpart = a.rpart();
|
||||||
here->HICUMqp0_t.dpart = a.dpart();
|
here->HICUMqp0_t.dpart = a.dpart();
|
||||||
//Voltage separating ohmic and saturation velocity regime
|
//Voltage separating ohmic and saturation velocity regime
|
||||||
|
|
@ -360,33 +264,33 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
here->HICUMtef0_t.dpart = a.dpart();
|
here->HICUMtef0_t.dpart = a.dpart();
|
||||||
} else {
|
} else {
|
||||||
//Internal b-e diode saturation currents
|
//Internal b-e diode saturation currents
|
||||||
a = ibeis_scaled*exp(model->HICUMzetabet*ln_qtt0+model->HICUMvge/vt*(qtt0-1));
|
a = here->HICUMibeis_scaled*exp(model->HICUMzetabet*ln_qtt0+model->HICUMvge/vt*(qtt0-1));
|
||||||
here->HICUMibeis_t.rpart = a.rpart();
|
here->HICUMibeis_t.rpart = a.rpart();
|
||||||
here->HICUMibeis_t.dpart = a.dpart();
|
here->HICUMibeis_t.dpart = a.dpart();
|
||||||
if (model->HICUMflcomp>=2.3) {
|
if (model->HICUMflcomp>=2.3) {
|
||||||
a = ireis_scaled*exp(mg/model->HICUMmrei*ln_qtt0+vgbe0/(model->HICUMmrei*vt)*(qtt0-1));
|
a = here->HICUMireis_scaled*exp(mg/model->HICUMmrei*ln_qtt0+vgbe0/(model->HICUMmrei*vt)*(qtt0-1));
|
||||||
} else {
|
} else {
|
||||||
a = ireis_scaled*exp(0.5*mg*ln_qtt0+0.5*vgbe0/vt*(qtt0-1));
|
a = here->HICUMireis_scaled*exp(0.5*mg*ln_qtt0+0.5*vgbe0/vt*(qtt0-1));
|
||||||
}
|
}
|
||||||
here->HICUMireis_t.rpart = a.rpart();
|
here->HICUMireis_t.rpart = a.rpart();
|
||||||
here->HICUMireis_t.dpart = a.dpart();
|
here->HICUMireis_t.dpart = a.dpart();
|
||||||
//Peripheral b-e diode saturation currents
|
//Peripheral b-e diode saturation currents
|
||||||
a = ibeps_scaled*exp(model->HICUMzetabet*ln_qtt0+model->HICUMvge/vt*(qtt0-1));
|
a = here->HICUMibeps_scaled*exp(model->HICUMzetabet*ln_qtt0+model->HICUMvge/vt*(qtt0-1));
|
||||||
here->HICUMibeps_t.rpart = a.rpart();
|
here->HICUMibeps_t.rpart = a.rpart();
|
||||||
here->HICUMibeps_t.dpart = a.dpart();
|
here->HICUMibeps_t.dpart = a.dpart();
|
||||||
if (model->HICUMflcomp>=2.3) {
|
if (model->HICUMflcomp>=2.3) {
|
||||||
a = ireps_scaled*exp(mg/model->HICUMmrep*ln_qtt0+vgbe0/(model->HICUMmrep*vt)*(qtt0-1));
|
a = here->HICUMireps_scaled*exp(mg/model->HICUMmrep*ln_qtt0+vgbe0/(model->HICUMmrep*vt)*(qtt0-1));
|
||||||
} else {
|
} else {
|
||||||
a = ireps_scaled*exp(0.5*mg*qtt0+0.5*vgbe0/vt*(qtt0-1));
|
a = here->HICUMireps_scaled*exp(0.5*mg*qtt0+0.5*vgbe0/vt*(qtt0-1));
|
||||||
}
|
}
|
||||||
here->HICUMireps_t.rpart = a.rpart();
|
here->HICUMireps_t.rpart = a.rpart();
|
||||||
here->HICUMireps_t.dpart = a.dpart();
|
here->HICUMireps_t.dpart = a.dpart();
|
||||||
//Internal b-c diode saturation currents
|
//Internal b-c diode saturation currents
|
||||||
a = ibcis_scaled*exp(zetabci*ln_qtt0+model->HICUMvgc/vt*(qtt0-1));
|
a = here->HICUMibcis_scaled*exp(zetabci*ln_qtt0+model->HICUMvgc/vt*(qtt0-1));
|
||||||
here->HICUMibcis_t.rpart = a.rpart();
|
here->HICUMibcis_t.rpart = a.rpart();
|
||||||
here->HICUMibcis_t.dpart = a.dpart();
|
here->HICUMibcis_t.dpart = a.dpart();
|
||||||
//External b-c diode saturation currents
|
//External b-c diode saturation currents
|
||||||
a = ibcxs_scaled*exp(zetabcxt*ln_qtt0+model->HICUMvgc/vt*(qtt0-1));
|
a = here->HICUMibcxs_scaled*exp(zetabcxt*ln_qtt0+model->HICUMvgc/vt*(qtt0-1));
|
||||||
here->HICUMibcxs_t.rpart = a.rpart();
|
here->HICUMibcxs_t.rpart = a.rpart();
|
||||||
here->HICUMibcxs_t.dpart = a.dpart();
|
here->HICUMibcxs_t.dpart = a.dpart();
|
||||||
//Saturation transfer current for substrate transistor
|
//Saturation transfer current for substrate transistor
|
||||||
|
|
@ -399,7 +303,7 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
here->HICUMiscs_t.dpart = a.dpart();
|
here->HICUMiscs_t.dpart = a.dpart();
|
||||||
//Zero bias hole charge
|
//Zero bias hole charge
|
||||||
a = exp(model->HICUMzei*log(vdei_t/model->HICUMvdei));
|
a = exp(model->HICUMzei*log(vdei_t/model->HICUMvdei));
|
||||||
a = qp0_scaled*(2.0-a);
|
a = here->HICUMqp0_scaled*(2.0-a);
|
||||||
here->HICUMqp0_t.rpart = a.rpart();
|
here->HICUMqp0_t.rpart = a.rpart();
|
||||||
here->HICUMqp0_t.dpart = a.dpart();
|
here->HICUMqp0_t.dpart = a.dpart();
|
||||||
//Voltage separating ohmic and saturation velocity regime
|
//Voltage separating ohmic and saturation velocity regime
|
||||||
|
|
@ -419,12 +323,12 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
}
|
}
|
||||||
|
|
||||||
//GICCR prefactor
|
//GICCR prefactor
|
||||||
a = c10_scaled*exp(model->HICUMzetact*ln_qtt0+model->HICUMvgb/vt*(qtt0-1));
|
a = here->HICUMc10_scaled*exp(model->HICUMzetact*ln_qtt0+model->HICUMvgb/vt*(qtt0-1));
|
||||||
here->HICUMc10_t.rpart = a.rpart();
|
here->HICUMc10_t.rpart = a.rpart();
|
||||||
here->HICUMc10_t.dpart = a.dpart();
|
here->HICUMc10_t.dpart = a.dpart();
|
||||||
|
|
||||||
// Low-field internal collector resistance
|
// Low-field internal collector resistance
|
||||||
a = rci0_scaled*exp(model->HICUMzetaci*ln_qtt0);
|
a = here->HICUMrci0_scaled*exp(model->HICUMzetaci*ln_qtt0);
|
||||||
here->HICUMrci0_t.rpart = a.rpart();
|
here->HICUMrci0_t.rpart = a.rpart();
|
||||||
here->HICUMrci0_t.dpart = a.dpart();
|
here->HICUMrci0_t.dpart = a.dpart();
|
||||||
|
|
||||||
|
|
@ -436,7 +340,7 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
//Internal b-c junction capacitance
|
//Internal b-c junction capacitance
|
||||||
// TMPHICJ(here->HICUMvt0,here->HICUMvt,here->HICUMqtt0,here->HICUMln_qtt0,here->HICUMmg,cjci0_scaled,model->HICUMvdci,model->HICUMzci,model->HICUMvptci,0,vgbc0,&cjci0_t,&vdci_t,&vptci_t);
|
// TMPHICJ(here->HICUMvt0,here->HICUMvt,here->HICUMqtt0,here->HICUMln_qtt0,here->HICUMmg,cjci0_scaled,model->HICUMvdci,model->HICUMzci,model->HICUMvptci,0,vgbc0,&cjci0_t,&vdci_t,&vptci_t);
|
||||||
hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg,
|
hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg,
|
||||||
cjci0_scaled, model->HICUMvdci, model->HICUMzci, model->HICUMvptci, 0, vgbc0,
|
here->HICUMcjci0_scaled, model->HICUMvdci, model->HICUMzci, model->HICUMvptci, 0, vgbc0,
|
||||||
&here->HICUMcjci0_t.rpart, &here->HICUMvdci_t.rpart, &here->HICUMvptci_t.rpart,
|
&here->HICUMcjci0_t.rpart, &here->HICUMvdci_t.rpart, &here->HICUMvptci_t.rpart,
|
||||||
&here->HICUMcjci0_t.dpart, &here->HICUMvdci_t.dpart, &here->HICUMvptci_t.dpart);
|
&here->HICUMcjci0_t.dpart, &here->HICUMvdci_t.dpart, &here->HICUMvptci_t.dpart);
|
||||||
|
|
||||||
|
|
@ -454,7 +358,7 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
a = model->HICUMfavl*exp(model->HICUMalfav*dT);
|
a = model->HICUMfavl*exp(model->HICUMalfav*dT);
|
||||||
here->HICUMfavl_t.rpart = a.rpart();
|
here->HICUMfavl_t.rpart = a.rpart();
|
||||||
here->HICUMfavl_t.dpart = a.dpart();
|
here->HICUMfavl_t.dpart = a.dpart();
|
||||||
a = qavl_scaled*exp(model->HICUMalqav*dT);
|
a = here->HICUMqavl_scaled*exp(model->HICUMalqav*dT);
|
||||||
here->HICUMqavl_t.rpart = a.rpart();
|
here->HICUMqavl_t.rpart = a.rpart();
|
||||||
here->HICUMqavl_t.dpart = a.dpart();
|
here->HICUMqavl_t.dpart = a.dpart();
|
||||||
a = model->HICUMkavl*exp(model->HICUMalkav*dT);
|
a = model->HICUMkavl*exp(model->HICUMalkav*dT);
|
||||||
|
|
@ -462,14 +366,14 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
here->HICUMkavl_t.dpart = a.dpart();
|
here->HICUMkavl_t.dpart = a.dpart();
|
||||||
|
|
||||||
//Zero bias internal base resistance
|
//Zero bias internal base resistance
|
||||||
a = rbi0_scaled*exp(model->HICUMzetarbi*ln_qtt0);
|
a = here->HICUMrbi0_scaled*exp(model->HICUMzetarbi*ln_qtt0);
|
||||||
here->HICUMrbi0_t.rpart = a.rpart();
|
here->HICUMrbi0_t.rpart = a.rpart();
|
||||||
here->HICUMrbi0_t.dpart = a.dpart();
|
here->HICUMrbi0_t.dpart = a.dpart();
|
||||||
|
|
||||||
//Peripheral b-e junction capacitance
|
//Peripheral b-e junction capacitance
|
||||||
// TMPHICJ(here->HICUMvt0,here->HICUMvt,here->HICUMqtt0,here->HICUMln_qtt0,here->HICUMmg,cjep0_scaled,model->HICUMvdep,model->HICUMzep,model->HICUMajep,1,vgbe0,&cjep0_t,&vdep_t,&ajep_t);
|
// TMPHICJ(here->HICUMvt0,here->HICUMvt,here->HICUMqtt0,here->HICUMln_qtt0,here->HICUMmg,cjep0_scaled,model->HICUMvdep,model->HICUMzep,model->HICUMajep,1,vgbe0,&cjep0_t,&vdep_t,&ajep_t);
|
||||||
hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg,
|
hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg,
|
||||||
cjep0_scaled, model->HICUMvdep, model->HICUMzep, model->HICUMajep, 1, vgbe0,
|
here->HICUMcjep0_scaled, model->HICUMvdep, model->HICUMzep, model->HICUMajep, 1, vgbe0,
|
||||||
&here->HICUMcjep0_t.rpart, &here->HICUMvdep_t.rpart, &here->HICUMajep_t.rpart,
|
&here->HICUMcjep0_t.rpart, &here->HICUMvdep_t.rpart, &here->HICUMajep_t.rpart,
|
||||||
&here->HICUMcjep0_t.dpart, &here->HICUMvdep_t.dpart, &here->HICUMajep_t.dpart);
|
&here->HICUMcjep0_t.dpart, &here->HICUMvdep_t.dpart, &here->HICUMajep_t.dpart);
|
||||||
cjep0_t.rpart(here->HICUMcjep0_t.rpart);
|
cjep0_t.rpart(here->HICUMcjep0_t.rpart);
|
||||||
|
|
@ -478,19 +382,19 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
vdep_t.dpart(here->HICUMvdep_t.dpart);
|
vdep_t.dpart(here->HICUMvdep_t.dpart);
|
||||||
|
|
||||||
//Tunneling current factors
|
//Tunneling current factors
|
||||||
if (ibets_scaled > 0) { // HICTUN_T
|
if (here->HICUMibets_scaled > 0) { // HICTUN_T
|
||||||
duals::duald a_eg,ab,aa;
|
duals::duald a_eg,ab,aa;
|
||||||
ab = 1.0;
|
ab = 1.0;
|
||||||
aa = 1.0;
|
aa = 1.0;
|
||||||
a_eg = vgbe_t0/vgbe_t;
|
a_eg = vgbe_t0/vgbe_t;
|
||||||
if(model->HICUMtunode==1 && cjep0_scaled > 0.0 && model->HICUMvdep >0.0) {
|
if(model->HICUMtunode==1 && here->HICUMcjep0_scaled > 0.0 && model->HICUMvdep >0.0) {
|
||||||
ab = (cjep0_t/cjep0_scaled)*sqrt(a_eg)*vdep_t*vdep_t/(model->HICUMvdep*model->HICUMvdep);
|
ab = (cjep0_t/here->HICUMcjep0_scaled)*sqrt(a_eg)*vdep_t*vdep_t/(model->HICUMvdep*model->HICUMvdep);
|
||||||
aa = (model->HICUMvdep/vdep_t)*(cjep0_scaled/cjep0_t)*pow(a_eg,-1.5);
|
aa = (model->HICUMvdep/vdep_t)*(here->HICUMcjep0_scaled/cjep0_t)*pow(a_eg,-1.5);
|
||||||
} else if (model->HICUMtunode==0 && cjei0_scaled > 0.0 && model->HICUMvdei >0.0) {
|
} else if (model->HICUMtunode==0 && here->HICUMcjei0_scaled > 0.0 && model->HICUMvdei >0.0) {
|
||||||
ab = (cjei0_t/cjei0_scaled)*sqrt(a_eg)*vdei_t*vdei_t/(model->HICUMvdei*model->HICUMvdei);
|
ab = (cjei0_t/here->HICUMcjei0_scaled)*sqrt(a_eg)*vdei_t*vdei_t/(model->HICUMvdei*model->HICUMvdei);
|
||||||
aa = (model->HICUMvdei/vdei_t)*(cjei0_scaled/cjei0_t)*pow(a_eg,-1.5);
|
aa = (model->HICUMvdei/vdei_t)*(here->HICUMcjei0_scaled/cjei0_t)*pow(a_eg,-1.5);
|
||||||
}
|
}
|
||||||
a = ibets_scaled*ab;
|
a = here->HICUMibets_scaled*ab;
|
||||||
here->HICUMibets_t.rpart = a.rpart();
|
here->HICUMibets_t.rpart = a.rpart();
|
||||||
here->HICUMibets_t.dpart = a.dpart();
|
here->HICUMibets_t.dpart = a.dpart();
|
||||||
a = model->HICUMabet*aa;
|
a = model->HICUMabet*aa;
|
||||||
|
|
@ -505,13 +409,13 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
|
|
||||||
//Depletion capacitance splitting at b-c junction
|
//Depletion capacitance splitting at b-c junction
|
||||||
//Capacitances at peripheral and external base node
|
//Capacitances at peripheral and external base node
|
||||||
C_1 = (1.0-model->HICUMfbcpar)*(cjcx0_scaled+cbcpar_scaled);
|
C_1 = (1.0-model->HICUMfbcpar)*(here->HICUMcjcx0_scaled+here->HICUMcbcpar_scaled);
|
||||||
if (C_1 >= cbcpar_scaled) {
|
if (C_1 >= here->HICUMcbcpar_scaled) {
|
||||||
cjcx01 = C_1-cbcpar_scaled;
|
cjcx01 = C_1-here->HICUMcbcpar_scaled;
|
||||||
cjcx02 = cjcx0_scaled-cjcx01;
|
cjcx02 = here->HICUMcjcx0_scaled-cjcx01;
|
||||||
} else {
|
} else {
|
||||||
cjcx01 = 0.0;
|
cjcx01 = 0.0;
|
||||||
cjcx02 = cjcx0_scaled;
|
cjcx02 = here->HICUMcjcx0_scaled;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Temperature mapping for tunneling current is done inside HICTUN
|
//Temperature mapping for tunneling current is done inside HICTUN
|
||||||
|
|
@ -530,13 +434,13 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
here->HICUMcjcx02_t.dpart = a.dpart();
|
here->HICUMcjcx02_t.dpart = a.dpart();
|
||||||
|
|
||||||
//Constant external series resistances
|
//Constant external series resistances
|
||||||
a = rcx_scaled*exp(model->HICUMzetarcx*ln_qtt0);
|
a = here->HICUMrcx_scaled*exp(model->HICUMzetarcx*ln_qtt0);
|
||||||
here->HICUMrcx_t.rpart = a.rpart();
|
here->HICUMrcx_t.rpart = a.rpart();
|
||||||
here->HICUMrcx_t.dpart = a.dpart();
|
here->HICUMrcx_t.dpart = a.dpart();
|
||||||
a = rbx_scaled*exp(model->HICUMzetarbx*ln_qtt0);
|
a = here->HICUMrbx_scaled*exp(model->HICUMzetarbx*ln_qtt0);
|
||||||
here->HICUMrbx_t.rpart = a.rpart();
|
here->HICUMrbx_t.rpart = a.rpart();
|
||||||
here->HICUMrbx_t.dpart = a.dpart();
|
here->HICUMrbx_t.dpart = a.dpart();
|
||||||
a = re_scaled*exp(model->HICUMzetare*ln_qtt0);
|
a = here->HICUMre_scaled*exp(model->HICUMzetare*ln_qtt0);
|
||||||
here->HICUMre_t.rpart = a.rpart();
|
here->HICUMre_t.rpart = a.rpart();
|
||||||
here->HICUMre_t.dpart = a.dpart();
|
here->HICUMre_t.dpart = a.dpart();
|
||||||
|
|
||||||
|
|
@ -594,7 +498,7 @@ int hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double
|
||||||
here->HICUMhfc_t.dpart = 0;
|
here->HICUMhfc_t.dpart = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
a = rth_scaled*exp(model->HICUMzetarth*ln_qtt0)*(1+model->HICUMalrth*dT);
|
a = here->HICUMrth_scaled*exp(model->HICUMzetarth*ln_qtt0)*(1+model->HICUMalrth*dT);
|
||||||
here->HICUMrth_t.rpart = a.rpart();
|
here->HICUMrth_t.rpart = a.rpart();
|
||||||
here->HICUMrth_t.dpart = a.dpart();
|
here->HICUMrth_t.dpart = a.dpart();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue