removed QpT and testing only 1 OP

This commit is contained in:
mariok 2020-05-04 19:00:31 +02:00
parent 9cb4c1546f
commit 3008c526bf
2 changed files with 53 additions and 46 deletions

View File

@ -558,7 +558,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
duals::duald result_itf, result_itr, result_Qf, result_Qr; //intermediate variables when calling void dual functions duals::duald result_itf, result_itr, result_Qf, result_Qr; //intermediate variables when calling void dual functions
double Orci0_t,b_q,I_Tf1,T_f0,Q_fT,T_fT,Q_bf; double Orci0_t,b_q,I_Tf1,T_f0,Q_fT,T_fT,Q_bf;
double a_h,d_Q; double a_h,d_Q;
double volatile Q_pT, Q_pT_dVbiei, Q_pT_dVbici, Q_pT_dT, Q_pT_dick, Q_pT_dT_f0, Q_pT_dQ_0, Q_pT_dVciei; // double volatile Q_pT, Q_pT_dVbiei, Q_pT_dVbici, Q_pT_dT, Q_pT_dick, Q_pT_dT_f0, Q_pT_dQ_0, Q_pT_dVciei;
// double volatile Q_pT_dT_numerical, Q_pT_dVbiei_numerical, Q_pT_dVbici_numerical, Q_pT_dQ_0_numerical, Q_pT_dT_f0_numerical, Q_pT_dick_numerical; // double volatile Q_pT_dT_numerical, Q_pT_dVbiei_numerical, Q_pT_dVbici_numerical, Q_pT_dQ_0_numerical, Q_pT_dT_f0_numerical, Q_pT_dick_numerical;
double Qf, Cdei, Qr, Cdci; double Qf, Cdei, Qr, Cdci;
double ick, ick_Vciei, ick_dT,vc,cjcx01,cjcx02; double ick, ick_Vciei, ick_dT,vc,cjcx01,cjcx02;
@ -1613,19 +1613,19 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
//todo: derivatives of temperature dependent hicum parameters //todo: derivatives of temperature dependent hicum parameters
//todo: it should be enough to run the newtone once -> potential for performance improvement is exactly here //todo: it should be enough to run the newtone once -> potential for performance improvement is exactly here
result = calc_it(here->HICUMtemp+1_e, Vbiei , Vbici , Q_0 , T_f0 , ick ); // result = calc_it(here->HICUMtemp+1_e, Vbiei , Vbici , Q_0 , T_f0 , ick );
Q_pT = result.rpart(); // Q_pT = result.rpart();
Q_pT_dT = result.dpart(); // Q_pT_dT = result.dpart();
result = calc_it(here->HICUMtemp , Vbiei+1_e, Vbici , Q_0 , T_f0 , ick ); // result = calc_it(here->HICUMtemp , Vbiei+1_e, Vbici , Q_0 , T_f0 , ick );
Q_pT_dVbiei = result.dpart(); // Q_pT_dVbiei = result.dpart();
result = calc_it(here->HICUMtemp , Vbiei , Vbici+1_e, Q_0 , T_f0 , ick ); // result = calc_it(here->HICUMtemp , Vbiei , Vbici+1_e, Q_0 , T_f0 , ick );
Q_pT_dVbici = result.dpart(); // Q_pT_dVbici = result.dpart();
result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0+1_e, T_f0 , ick ); // result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0+1_e, T_f0 , ick );
Q_pT_dQ_0 = result.dpart(); // Q_pT_dQ_0 = result.dpart();
result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0 , T_f0+1_e, ick ); // result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0 , T_f0+1_e, ick );
Q_pT_dT_f0 = result.dpart(); // Q_pT_dT_f0 = result.dpart();
result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0 , T_f0 , ick+1_e); // result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0 , T_f0 , ick+1_e);
Q_pT_dick = result.dpart(); // Q_pT_dick = result.dpart();
//check derivatives numerically (delete ones everything works....) //check derivatives numerically (delete ones everything works....)
// result = calc_it(here->HICUMtemp+1e-3, Vbiei , Vbici , Q_0 , T_f0 , ick ); // result = calc_it(here->HICUMtemp+1e-3, Vbiei , Vbici , Q_0 , T_f0 , ick );
@ -1642,22 +1642,23 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
// Q_pT_dick_numerical = (result.rpart() - Q_pT)/(ick*1e-3); // Q_pT_dick_numerical = (result.rpart() - Q_pT)/(ick*1e-3);
//add derivatives of ick //add derivatives of ick
Q_pT_dVciei = Q_pT_dick*ick_Vciei; //additional component not seen in equivalent circuit of HiCUM...jesus // Q_pT_dVciei = Q_pT_dick*ick_Vciei; //additional component not seen in equivalent circuit of HiCUM...jesus
Q_pT_dT += Q_pT_dick*ick_dT; // Q_pT_dT += Q_pT_dick*ick_dT;
//add derivatives of Q_0 // //add derivatives of Q_0
Q_pT_dVbiei += Q_pT_dQ_0*Q_0_Vbiei; // Q_pT_dVbiei += Q_pT_dQ_0*Q_0_Vbiei;
Q_pT_dVbici += Q_pT_dQ_0*Q_0_Vbici; // Q_pT_dVbici += Q_pT_dQ_0*Q_0_Vbici;
Q_pT_dT += Q_pT_dQ_0*Q_0_dT; // Q_pT_dT += Q_pT_dQ_0*Q_0_dT;
//add derivatives of T_f0 // //add derivatives of T_f0
Q_pT_dVbici += Q_pT_dT_f0*T_f0_Vbici; // Q_pT_dVbici += Q_pT_dT_f0*T_f0_Vbici;
Q_pT_dT += Q_pT_dT*T_f0_dT; // Q_pT_dT += Q_pT_dT*T_f0_dT;
//end Q_pT ------------------------------------------------------------------------------- //end Q_pT -------------------------------------------------------------------------------
//begin final transfer current calculations -> itf, itr, Qf, Qr------------ //begin final transfer current calculations -> itf, itr, Qf, Qr------------
calc_it_final(here->HICUMtemp+1_e, Vbiei , Vbici , Q_pT , T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr); calc_it_final(here->HICUMtemp+1_e, Vbiei , Vbici , Q_0 , T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr);
// calc_it_final(here->HICUMtemp+1_e, Vbiei , Vbici , Q_pT , T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr);
itf = result_itf.rpart(); itf = result_itf.rpart();
itr = result_itr.rpart(); itr = result_itr.rpart();
Qf = result_Qf.rpart(); Qf = result_Qf.rpart();
@ -1666,56 +1667,61 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
itr_dT = result_itr.dpart(); itr_dT = result_itr.dpart();
Qf_dT = result_Qf.dpart(); Qf_dT = result_Qf.dpart();
Qr_dT = result_Qr.dpart(); Qr_dT = result_Qr.dpart();
calc_it_final(here->HICUMtemp , Vbiei+1_e, Vbici , Q_pT , T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr); // calc_it_final(here->HICUMtemp , Vbiei+1_e, Vbici , Q_pT , T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr);
calc_it_final(here->HICUMtemp , Vbiei+1_e, Vbici , Q_0 , T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr);
itf_Vbiei = result_itf.dpart(); itf_Vbiei = result_itf.dpart();
itr_Vbiei = result_itr.dpart(); itr_Vbiei = result_itr.dpart();
Qf_Vbiei = result_Qf.dpart(); Qf_Vbiei = result_Qf.dpart();
Qr_Vbiei = result_Qr.dpart(); Qr_Vbiei = result_Qr.dpart();
calc_it_final(here->HICUMtemp , Vbiei , Vbici+1_e, Q_pT , T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr); calc_it_final(here->HICUMtemp , Vbiei , Vbici+1_e, Q_0 , T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr);
// calc_it_final(here->HICUMtemp , Vbiei , Vbici+1_e, Q_pT , T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr);
itf_Vbici = result_itf.dpart(); itf_Vbici = result_itf.dpart();
itr_Vbici = result_itr.dpart(); itr_Vbici = result_itr.dpart();
Qf_Vbici = result_Qf.dpart(); Qf_Vbici = result_Qf.dpart();
Qr_Vbici = result_Qr.dpart(); Qr_Vbici = result_Qr.dpart();
calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_pT+1_e, T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr); calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_0+1_e, T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr);
// calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_pT+1_e, T_f0 , ick , &result_itf, &result_itr, &result_Qf, &result_Qr);
itf_dQ_pT = result_itf.dpart(); itf_dQ_pT = result_itf.dpart();
itr_dQ_pT = result_itr.dpart(); itr_dQ_pT = result_itr.dpart();
Qf_dQ_pT = result_Qf.dpart(); Qf_dQ_pT = result_Qf.dpart();
Qr_dQ_pT = result_Qr.dpart(); Qr_dQ_pT = result_Qr.dpart();
calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_pT , T_f0+1_e, ick , &result_itf, &result_itr, &result_Qf, &result_Qr); calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_0 , T_f0+1_e, ick , &result_itf, &result_itr, &result_Qf, &result_Qr);
// calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_pT , T_f0+1_e, ick , &result_itf, &result_itr, &result_Qf, &result_Qr);
itf_dT_f0 = result_itf.dpart(); itf_dT_f0 = result_itf.dpart();
itr_dT_f0 = result_itr.dpart(); itr_dT_f0 = result_itr.dpart();
Qf_dT_f0 = result_Qf.dpart(); Qf_dT_f0 = result_Qf.dpart();
Qr_dT_f0 = result_Qr.dpart(); Qr_dT_f0 = result_Qr.dpart();
calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_pT , T_f0 , ick+1_e, &result_itf, &result_itr, &result_Qf, &result_Qr); calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_0 , T_f0 , ick+1_e, &result_itf, &result_itr, &result_Qf, &result_Qr);
// calc_it_final(here->HICUMtemp , Vbiei , Vbici , Q_pT , T_f0 , ick+1_e, &result_itf, &result_itr, &result_Qf, &result_Qr);
itf_dick = result_itf.dpart(); itf_dick = result_itf.dpart();
itr_dick = result_itr.dpart(); itr_dick = result_itr.dpart();
Qf_dick = result_Qf.dpart(); Qf_dick = result_Qf.dpart();
Qr_dick = result_Qr.dpart(); Qr_dick = result_Qr.dpart();
// add derivatives of Q_pT = f(Vbici,Vbiei,Vciei,T) // add derivatives of Q_pT = f(Vbici,Vbiei,Vciei,T)
itf_dT += itf_dQ_pT*Q_pT_dT; // itf_dT += itf_dQ_pT*Q_pT_dT;
itr_dT += itr_dQ_pT*Q_pT_dT; // itr_dT += itr_dQ_pT*Q_pT_dT;
Qf_dT += Qf_dQ_pT*Q_pT_dT; // Qf_dT += Qf_dQ_pT*Q_pT_dT;
Qr_dT += Qr_dQ_pT*Q_pT_dT; // Qr_dT += Qr_dQ_pT*Q_pT_dT;
itf_Vbiei += itf_dQ_pT*Q_pT_dVbiei; // itf_Vbiei += itf_dQ_pT*Q_pT_dVbiei;
itr_Vbiei += itr_dQ_pT*Q_pT_dVbiei; // itr_Vbiei += itr_dQ_pT*Q_pT_dVbiei;
Qf_Vbiei += Qf_dQ_pT*Q_pT_dVbiei; // Qf_Vbiei += Qf_dQ_pT*Q_pT_dVbiei;
Qr_Vbiei += Qr_dQ_pT*Q_pT_dVbiei; // Qr_Vbiei += Qr_dQ_pT*Q_pT_dVbiei;
itf_Vbici += itf_dQ_pT*Q_pT_dVbici; // itf_Vbici += itf_dQ_pT*Q_pT_dVbici;
itr_Vbici += itr_dQ_pT*Q_pT_dVbici; // itr_Vbici += itr_dQ_pT*Q_pT_dVbici;
Qf_Vbici += Qf_dQ_pT*Q_pT_dVbici; // Qf_Vbici += Qf_dQ_pT*Q_pT_dVbici;
Qr_Vbici += Qr_dQ_pT*Q_pT_dVbici; // Qr_Vbici += Qr_dQ_pT*Q_pT_dVbici;
itf_Vciei += itf_dQ_pT*Q_pT_dVciei; // itf_Vciei += itf_dQ_pT*Q_pT_dVciei;
itr_Vciei += itr_dQ_pT*Q_pT_dVciei; // itr_Vciei += itr_dQ_pT*Q_pT_dVciei;
Qf_Vciei += Qf_dQ_pT*Q_pT_dVciei; // Qf_Vciei += Qf_dQ_pT*Q_pT_dVciei;
Qr_Vciei += Qr_dQ_pT*Q_pT_dVciei; // Qr_Vciei += Qr_dQ_pT*Q_pT_dVciei;
// add derivatives of T_f0 = f(Vbici, T) // add derivatives of T_f0 = f(Vbici, T)
itf_Vbici += itf_dick*T_f0_Vbici; itf_Vbici += itf_dick*T_f0_Vbici;

View File

@ -4,7 +4,8 @@ VC Q1_C 0 0.0
VB Q1_B 0 0.0 VB Q1_B 0 0.0
RT Q1_T 0 1M RT Q1_T 0 1M
Q1 Q1_C Q1_B Q1_E Q1_E Q1_T P1 icVBE=0.2 icVCE=0.2 dt=0.0 Q1 Q1_C Q1_B Q1_E Q1_E Q1_T P1 icVBE=0.2 icVCE=0.2 dt=0.0
.DC VE -0.2 -1.2 -10m * .DC VE -0.2 -1.2 -10m
.DC VE -0.2 -0.21 -10m
.OPTIONS GMIN=1e-13 NOACCT .OPTIONS GMIN=1e-13 NOACCT
.print dc abs(i(vc)) abs(i(vb)) .print dc abs(i(vc)) abs(i(vb))