started derivatives of hicum2 minority charge
This commit is contained in:
parent
c7e5df27db
commit
9da946bf2d
|
|
@ -73,3 +73,5 @@ Makefile.in
|
|||
# Visual Studio user options files
|
||||
**/*.vcxproj.user
|
||||
|
||||
# Visual Studio Code user options files
|
||||
.vscode/
|
||||
|
|
|
|||
|
|
@ -502,6 +502,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double a_h,Q_pT,d_Q;
|
||||
double Qf,Cdei,Qr,Cdci;
|
||||
double ick,vc,cjcx01,cjcx02;
|
||||
double ick_Vciei;
|
||||
double Qf_Vbiei, Qf_Vbici, Q_bf_Vbiei, Q_bf_Vbici, Qr_Vbiei, Qr_Vbici, Q_pT_Vbiei, Q_pT_Vbici;
|
||||
|
||||
int l_it;
|
||||
|
||||
//NQS
|
||||
|
|
@ -1226,6 +1229,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
//Critical current for onset of high-current effects
|
||||
{ // HICICK
|
||||
double Ovpt,a,d1,vceff,a1,a11,Odelck,ick1,ick2,ICKa;
|
||||
double d1_Vciei, vceff_Vciei, a1_Vciei, ick1_Vciei, ick2_Vciei, ICKa_Vciei;
|
||||
Ovpt = 1.0/model->HICUMvpt;
|
||||
a = vc/here->HICUMvt;
|
||||
d1 = a-1;
|
||||
|
|
@ -1239,6 +1243,18 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
ICKa = (vceff-here->HICUMvlim_t)*Ovpt;
|
||||
ick = ick2*(1.0+0.5*(ICKa+sqrt(ICKa*ICKa+model->HICUMaick)));
|
||||
|
||||
// derivative: maxima
|
||||
d1_Vciei = 1/here->HICUMvt;
|
||||
// vceff_Vciei = (((d_1*d1_Vciei/sqrt(d_1^2+1.921812)+d1_Vciei)*v_t)/2
|
||||
vceff_Vciei = (d1*d1_Vciei/sqrt(d1*d1+1.921812)+d1_Vciei)*here->HICUMvt/2;
|
||||
a1_Vciei = vceff_Vciei/here->HICUMvlim_t;
|
||||
// ick1_Vciei = (exp(log(exp(d_elck*log(a1))+1)/d_elck+d_elck*log(a1))*a1_Vciei)/(a1*(exp(d_elck*log(a1))+1))
|
||||
ick1_Vciei = (exp(Odelck*log(1+exp(model->HICUMdelck*log(a1))) + model->HICUMdelck*log(a1))*a1_Vciei)/(a1*(exp(model->HICUMdelck*log(a1))+1));
|
||||
ick2_Vciei = -1.0*a11*ick1_Vciei/ick1/ick1;
|
||||
ICKa_Vciei = vceff_Vciei*Ovpt;
|
||||
|
||||
// ick_Vciei = (0.5*(sqrt(I_CKa(x)^2+a_ick)+I_CKa(x))+1.0)*('diff(i_ck2(x),x,1))+0.5*i_ck2(x)*((I_CKa(x)*('diff(I_CKa(x),x,1)))/sqrt(I_CKa(x)^2+a_ick)+'diff(I_CKa(x),x,1))
|
||||
ick_Vciei = (0.5*(sqrt(ICKa*ICKa+model->HICUMaick)+ICKa)+1.0)*ick2_Vciei+0.5*ick2*((ICKa*(ICKa_Vciei))/sqrt(ICKa*ICKa+model->HICUMaick)+ICKa_Vciei);
|
||||
}
|
||||
|
||||
//Initialization
|
||||
|
|
@ -1283,7 +1299,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Tf = T_f0;
|
||||
Qf = T_f0*itf;
|
||||
HICQFF(here, model, itf,ick,&Tf,&Qf,&T_fT,&Q_fT,&Q_bf);
|
||||
//TODO: itf=f(Vbiei,Vbici) -> Qf, Q_bf Ableitungen nach Vbiei, Vbici
|
||||
//Initial formulation of reverse diffusion charge
|
||||
Qr = Tr*itr;
|
||||
|
||||
|
|
@ -1293,7 +1308,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
//Iteration for Q_pT is required for improved initial solution
|
||||
Qf = sqrt(T_f0*itf*Q_fT);
|
||||
Q_pT = Q_0+Qf+Qr;
|
||||
//TODO: Q_pT_Vbiei, Vbici
|
||||
d_Q = Q_pT;
|
||||
while (fabs(d_Q) >= RTOLC*fabs(Q_pT) && l_it <= l_itmax) {
|
||||
double a;
|
||||
|
|
@ -1337,6 +1351,21 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
|
||||
} //if
|
||||
// TODO calculate here the derivatives once! They are not needed inside the newton...
|
||||
// Qf = Tf*itf;
|
||||
Qf_Vbiei = 0;
|
||||
Qf_Vbici = 0;
|
||||
// Qr = Tr*itr;
|
||||
Qr_Vbiei = 0;
|
||||
Qr_Vbici = 0;
|
||||
// Q_pT = Q_0+Qf+Qr;
|
||||
Q_pT_Vbiei = Q_0_Vbiei + Qf_Vbiei + Qr_Vbiei;
|
||||
Q_pT_Vbici = Q_0_Vbici + Qf_Vbici + Qr_Vbici;
|
||||
// Q_bf = Q_0+Qf+Qr;
|
||||
Q_bf_Vbiei = 0;
|
||||
Q_bf_Vbici = 0;
|
||||
|
||||
// itf, itr
|
||||
//TODO: itf=f(Vbiei,Vbici) -> Qf, Q_bf Ableitungen nach Vbiei, Vbici
|
||||
itf_Vbiei = itf/VT_f; // TODO: missing the derivatives of Qf
|
||||
itr_Vbici = itr/here->HICUMvt; // TODO: missing the derivatives of Qpt
|
||||
|
||||
|
|
@ -1395,10 +1424,10 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
sq_smooth = sqrt(denom*denom+0.01);
|
||||
hl = 0.5*(denom+sq_smooth);
|
||||
iavl = itf*avl/hl;
|
||||
iavl_Vbici = itf*avl_Vbici/hl;
|
||||
iavl_Vbici = itf*avl_Vbici/hl; // TODO itf_Vbici
|
||||
} else {
|
||||
iavl = itf*avl;
|
||||
iavl_Vbici = itf*avl_Vbici;
|
||||
iavl_Vbici = itf*avl_Vbici; // TODO itf_Vbici
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1447,6 +1476,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
// Consideration of peripheral charge
|
||||
if(Qf > 0.0) {
|
||||
rbi = rbi*(Qjei+Qf*model->HICUMfqi)/(Qjei+Qf);
|
||||
// Qf_Viei and Qf_Vbici
|
||||
rbi_Vbiei = (Qjei+Qf*model->HICUMfqi)*rbi_Vbiei/(Qjei+Qf) + rbi*Cjei/(Qjei+Qf) - (Qjei+Qf*model->HICUMfqi)*rbi*Cjei/(Qjei+Qf)/(Qjei+Qf);
|
||||
rbi_Vbici = rbi_Vbici*(Qjei+Qf*model->HICUMfqi)/(Qjei+Qf);
|
||||
}
|
||||
|
|
@ -1574,22 +1604,16 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
// Excess Phase calculation
|
||||
|
||||
if ((model->HICUMflnqs != 0 || model->HICUMflcomp == 0.0 || model->HICUMflcomp == 2.1) && Tf != 0 && (model->HICUMalit > 0 || model->HICUMalqf > 0)) {
|
||||
// Vxf1 = Vbxf1;
|
||||
// Vxf2 = Vbxf2;
|
||||
Vxf1 = Vbxf1;
|
||||
Vxf2 = Vbxf2;
|
||||
|
||||
// Ixf1 = (Vxf2-itf)/Tf*model->HICUMt0;
|
||||
// Ixf2 = (Vxf2-Vxf1)/Tf*model->HICUMt0;
|
||||
// Qxf1 = model->HICUMalit*model->HICUMt0*Vxf1;
|
||||
// Qxf1_Vxf1 = model->HICUMalit*model->HICUMt0;
|
||||
// Qxf2 = model->HICUMalit*model->HICUMt0*Vxf2/3;
|
||||
// Qxf2_Vxf2 = model->HICUMalit*model->HICUMt0/3;
|
||||
// Itxf = Vxf2;
|
||||
Ixf1 = Vbxf1;
|
||||
Ixf2 = Vbxf2;
|
||||
Qxf1 = 0;
|
||||
Qxf2 = 0;
|
||||
Qxf1_Vxf1 = 0;
|
||||
Qxf2_Vxf2 = 0;
|
||||
Ixf1 = (Vxf2-itf)/Tf*model->HICUMt0;
|
||||
Ixf2 = (Vxf2-Vxf1)/Tf*model->HICUMt0;
|
||||
Qxf1 = model->HICUMalit*model->HICUMt0*Vxf1;
|
||||
Qxf1_Vxf1 = model->HICUMalit*model->HICUMt0;
|
||||
Qxf2 = model->HICUMalit*model->HICUMt0*Vxf2/3;
|
||||
Qxf2_Vxf2 = model->HICUMalit*model->HICUMt0/3;
|
||||
Itxf = Vxf2;
|
||||
|
||||
// TODO derivatives of Ixf1 and Ixf2
|
||||
|
||||
|
|
@ -2316,7 +2340,7 @@ c Branch: sis, Stamp element: Rsu
|
|||
/*
|
||||
c Branch: xf1-ground, Stamp element: Ixf1
|
||||
*/
|
||||
// rhs_current = (Ixf1 - Ixf1_Vrth*Vrth - Ixf1_Vbiei*Vbiei - Ixf1_Vbici*Vbici - Ixf2_Vxf2*Vxf2);
|
||||
// rhs_current = (Ixf1 - Ixf1_Vxf1*Vxf1 - Ixf1_Vrth*Vrth - Ixf1_Vbiei*Vbiei - Ixf1_Vbici*Vbici - Ixf1_Vxf2*Vxf2); // TODO
|
||||
rhs_current = Ixf1;
|
||||
*(ckt->CKTrhs + here->HICUMxf1Node) += rhs_current; // into xf1 node
|
||||
// *(here->HICUMxf1TempPtr) += -Ixf1_Vrth;
|
||||
|
|
@ -2324,33 +2348,30 @@ c Branch: xf1-ground, Stamp element: Ixf1
|
|||
// *(here->HICUMxf1EmitEIPtr) += +Ixf1_Vbiei;
|
||||
// *(here->HICUMxf1BaseBIPtr) += -Ixf1_Vbici;
|
||||
// *(here->HICUMxf1CollCIPtr) += +Ixf1_Vbici;
|
||||
// *(here->HICUMxf1Xf2Ptr) += +Ixf1_Vxf2; // TODO
|
||||
// *(here->HICUMxf1Xf2Ptr) += +Ixf1_Vxf2;
|
||||
/*
|
||||
c Branch: xf1-ground, Stamp element: Qxf1
|
||||
c Branch: xf1-ground, Stamp element: Qxf1 // TODO Test in AC simulation!
|
||||
*/
|
||||
rhs_current = Iqxf1 - Iqxf1_Vxf1*Vxf1;
|
||||
*(ckt->CKTrhs + here->HICUMxf1Node) += rhs_current; // into ground
|
||||
*(here->HICUMxf1Xf1Ptr) += Iqxf1_Vxf1;
|
||||
/*
|
||||
c Branch: xf1-ground, Stamp element: Rxf1
|
||||
*/
|
||||
*(here->HICUMxf1Xf1Ptr) += 1; // current Ixf1 is normalized to Tf
|
||||
// rhs_current = Iqxf1 - Iqxf1_Vxf1*Vxf1;
|
||||
// *(ckt->CKTrhs + here->HICUMxf1Node) += rhs_current; // into ground
|
||||
// *(here->HICUMxf1Xf1Ptr) += Iqxf1_Vxf1;
|
||||
/*
|
||||
c Branch: xf2-ground, Stamp element: Ixf2
|
||||
*/
|
||||
// rhs_current = (Ixf2 - Ixf2_Vxf1*Vxf1 - Ixf2_Vrth*Vrth - Ixf2_Vbiei*Vbiei - Ixf2_Vbici*Vbici - Ixf2_Vxf2*Vxf2); // TODO
|
||||
rhs_current = Ixf2;
|
||||
*(ckt->CKTrhs + here->HICUMxf2Node) += rhs_current; // into xf node
|
||||
*(ckt->CKTrhs + here->HICUMxf2Node) += rhs_current; // into xf2 node
|
||||
// *(here->HICUMxf2TempPtr) += -Ixf2_Vrth;
|
||||
// *(here->HICUMxf2BaseBIPtr) += -Ixf2_Vbiei;
|
||||
// *(here->HICUMxf2EmitEIPtr) += +Ixf2_Vbiei;
|
||||
// *(here->HICUMxf2BaseBIPtr) += -Ixf2_Vbici;
|
||||
// *(here->HICUMxf2CollCIPtr) += +Ixf2_Vbici;
|
||||
/*
|
||||
c Branch: xf2-ground, Stamp element: Qxf2
|
||||
c Branch: xf2-ground, Stamp element: Qxf2 // TODO Test in AC simulation!
|
||||
*/
|
||||
rhs_current = Iqxf2 - Iqxf2_Vxf2*Vxf2;
|
||||
*(ckt->CKTrhs + here->HICUMxf2Node) += rhs_current; // into ground
|
||||
*(here->HICUMxf2Xf2Ptr) += Iqxf2_Vxf2;
|
||||
// rhs_current = Iqxf2 - Iqxf2_Vxf2*Vxf2;
|
||||
// *(ckt->CKTrhs + here->HICUMxf2Node) += rhs_current; // into ground
|
||||
// *(here->HICUMxf2Xf2Ptr) += Iqxf2_Vxf2;
|
||||
/*
|
||||
c Branch: xf2-ground, Stamp element: Rxf2
|
||||
*/
|
||||
|
|
@ -2367,7 +2388,7 @@ c Branch: xf-ground, Stamp element: Ixf
|
|||
// *(here->HICUMxfBaseBIPtr) += -Ixf_Vbici;
|
||||
// *(here->HICUMxfCollCIPtr) += +Ixf_Vbici;
|
||||
/*
|
||||
c Branch: xf-ground, Stamp element: Qxf
|
||||
c Branch: xf-ground, Stamp element: Qxf // TODO Test in AC simulation!
|
||||
*/
|
||||
// rhs_current = model->HICUMtype * (Iqxf - Iqxf_Vxf*Vxf);
|
||||
// *(ckt->CKTrhs + here->HICUMxfNode) += rhs_current; // into ground
|
||||
|
|
|
|||
Loading…
Reference in New Issue