diff --git a/src/spicelib/devices/hicum2/hicumL2.cpp b/src/spicelib/devices/hicum2/hicumL2.cpp index e452f0631..9c0d7bb2b 100644 --- a/src/spicelib/devices/hicum2/hicumL2.cpp +++ b/src/spicelib/devices/hicum2/hicumL2.cpp @@ -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 double Orci0_t,b_q,I_Tf1,T_f0,Q_fT,T_fT,Q_bf; 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 Qf, Cdei, Qr, Cdci; 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: 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 ); - Q_pT = result.rpart(); - Q_pT_dT = result.dpart(); - result = calc_it(here->HICUMtemp , Vbiei+1_e, Vbici , Q_0 , T_f0 , ick ); - Q_pT_dVbiei = result.dpart(); - result = calc_it(here->HICUMtemp , Vbiei , Vbici+1_e, Q_0 , T_f0 , ick ); - Q_pT_dVbici = result.dpart(); - result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0+1_e, T_f0 , ick ); - Q_pT_dQ_0 = result.dpart(); - result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0 , T_f0+1_e, ick ); - Q_pT_dT_f0 = result.dpart(); - result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0 , T_f0 , ick+1_e); - Q_pT_dick = result.dpart(); + // result = calc_it(here->HICUMtemp+1_e, Vbiei , Vbici , Q_0 , T_f0 , ick ); + // Q_pT = result.rpart(); + // Q_pT_dT = result.dpart(); + // result = calc_it(here->HICUMtemp , Vbiei+1_e, Vbici , Q_0 , T_f0 , ick ); + // Q_pT_dVbiei = result.dpart(); + // result = calc_it(here->HICUMtemp , Vbiei , Vbici+1_e, Q_0 , T_f0 , ick ); + // Q_pT_dVbici = result.dpart(); + // result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0+1_e, T_f0 , ick ); + // Q_pT_dQ_0 = result.dpart(); + // result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0 , T_f0+1_e, ick ); + // Q_pT_dT_f0 = result.dpart(); + // result = calc_it(here->HICUMtemp , Vbiei , Vbici , Q_0 , T_f0 , ick+1_e); + // Q_pT_dick = result.dpart(); //check derivatives numerically (delete ones everything works....) // 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); //add derivatives of ick - 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_dVciei = Q_pT_dick*ick_Vciei; //additional component not seen in equivalent circuit of HiCUM...jesus + // Q_pT_dT += Q_pT_dick*ick_dT; - //add derivatives of Q_0 - Q_pT_dVbiei += Q_pT_dQ_0*Q_0_Vbiei; - Q_pT_dVbici += Q_pT_dQ_0*Q_0_Vbici; - Q_pT_dT += Q_pT_dQ_0*Q_0_dT; + // //add derivatives of Q_0 + // Q_pT_dVbiei += Q_pT_dQ_0*Q_0_Vbiei; + // Q_pT_dVbici += Q_pT_dQ_0*Q_0_Vbici; + // Q_pT_dT += Q_pT_dQ_0*Q_0_dT; - //add derivatives of T_f0 - Q_pT_dVbici += Q_pT_dT_f0*T_f0_Vbici; - Q_pT_dT += Q_pT_dT*T_f0_dT; + // //add derivatives of T_f0 + // Q_pT_dVbici += Q_pT_dT_f0*T_f0_Vbici; + // Q_pT_dT += Q_pT_dT*T_f0_dT; //end Q_pT ------------------------------------------------------------------------------- //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(); itr = result_itr.rpart(); Qf = result_Qf.rpart(); @@ -1666,56 +1667,61 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) itr_dT = result_itr.dpart(); Qf_dT = result_Qf.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(); itr_Vbiei = result_itr.dpart(); Qf_Vbiei = result_Qf.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(); itr_Vbici = result_itr.dpart(); Qf_Vbici = result_Qf.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(); itr_dQ_pT = result_itr.dpart(); Qf_dQ_pT = result_Qf.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(); itr_dT_f0 = result_itr.dpart(); Qf_dT_f0 = result_Qf.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(); itr_dick = result_itr.dpart(); Qf_dick = result_Qf.dpart(); Qr_dick = result_Qr.dpart(); // add derivatives of Q_pT = f(Vbici,Vbiei,Vciei,T) - itf_dT += itf_dQ_pT*Q_pT_dT; - itr_dT += itr_dQ_pT*Q_pT_dT; - Qf_dT += Qf_dQ_pT*Q_pT_dT; - Qr_dT += Qr_dQ_pT*Q_pT_dT; + // itf_dT += itf_dQ_pT*Q_pT_dT; + // itr_dT += itr_dQ_pT*Q_pT_dT; + // Qf_dT += Qf_dQ_pT*Q_pT_dT; + // Qr_dT += Qr_dQ_pT*Q_pT_dT; - itf_Vbiei += itf_dQ_pT*Q_pT_dVbiei; - itr_Vbiei += itr_dQ_pT*Q_pT_dVbiei; - Qf_Vbiei += Qf_dQ_pT*Q_pT_dVbiei; - Qr_Vbiei += Qr_dQ_pT*Q_pT_dVbiei; + // itf_Vbiei += itf_dQ_pT*Q_pT_dVbiei; + // itr_Vbiei += itr_dQ_pT*Q_pT_dVbiei; + // Qf_Vbiei += Qf_dQ_pT*Q_pT_dVbiei; + // Qr_Vbiei += Qr_dQ_pT*Q_pT_dVbiei; - itf_Vbici += itf_dQ_pT*Q_pT_dVbici; - itr_Vbici += itr_dQ_pT*Q_pT_dVbici; - Qf_Vbici += Qf_dQ_pT*Q_pT_dVbici; - Qr_Vbici += Qr_dQ_pT*Q_pT_dVbici; + // itf_Vbici += itf_dQ_pT*Q_pT_dVbici; + // itr_Vbici += itr_dQ_pT*Q_pT_dVbici; + // Qf_Vbici += Qf_dQ_pT*Q_pT_dVbici; + // Qr_Vbici += Qr_dQ_pT*Q_pT_dVbici; - itf_Vciei += itf_dQ_pT*Q_pT_dVciei; - itr_Vciei += itr_dQ_pT*Q_pT_dVciei; - Qf_Vciei += Qf_dQ_pT*Q_pT_dVciei; - Qr_Vciei += Qr_dQ_pT*Q_pT_dVciei; + // itf_Vciei += itf_dQ_pT*Q_pT_dVciei; + // itr_Vciei += itr_dQ_pT*Q_pT_dVciei; + // Qf_Vciei += Qf_dQ_pT*Q_pT_dVciei; + // Qr_Vciei += Qr_dQ_pT*Q_pT_dVciei; // add derivatives of T_f0 = f(Vbici, T) itf_Vbici += itf_dick*T_f0_Vbici; diff --git a/tests/hicum2/FG.cir b/tests/hicum2/FG.cir index b23d3076c..a9e4e7576 100644 --- a/tests/hicum2/FG.cir +++ b/tests/hicum2/FG.cir @@ -4,7 +4,8 @@ VC Q1_C 0 0.0 VB Q1_B 0 0.0 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 -.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 .print dc abs(i(vc)) abs(i(vb))