From 7180384ef37bec7d153df24039aaa9dce8966d99 Mon Sep 17 00:00:00 2001 From: mariok Date: Thu, 27 Aug 2020 11:15:31 +0200 Subject: [PATCH] some buggs in DC load found, now missing derivatives --- src/spicelib/devices/hicum2/hicum2acld.c | 12 ++++++ src/spicelib/devices/hicum2/hicumL2.cpp | 51 +++++++++++++----------- 2 files changed, 40 insertions(+), 23 deletions(-) diff --git a/src/spicelib/devices/hicum2/hicum2acld.c b/src/spicelib/devices/hicum2/hicum2acld.c index dabad330c..d309d7490 100644 --- a/src/spicelib/devices/hicum2/hicum2acld.c +++ b/src/spicelib/devices/hicum2/hicum2acld.c @@ -217,6 +217,11 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) Ixf_Vxf = *(ckt->CKTstate0 + here->HICUMixf_Vxf); Ixf_Vrth = *(ckt->CKTstate0 + here->HICUMixf_Vrth); + // correlated_noise + In1_Vn1 = *(ckt->CKTstate0 + here->HICUMin1_Vn1); + In1_Vn2 = *(ckt->CKTstate0 + here->HICUMin1_Vn2); + In2_Vn2 = *(ckt->CKTstate0 + here->HICUMin2_Vn2); + //////////////////////////////////// ////////// The real part ///////// //////////////////////////////////// @@ -347,6 +352,13 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) *(here->HICUMxfXfPtr) += +Ixf_Vxf; } + if (correlated_noise) { + //In1 + *(here->HICUMn1N1Ptr) += +In1_Vn1; + *(here->HICUMn1N2Ptr) += +In1_Vn2; + //In2 + *(here->HICUMn2N2Ptr) += +In2_Vn2; + } //////////////////////////////////// ////////// The complex part ////// //////////////////////////////////// diff --git a/src/spicelib/devices/hicum2/hicumL2.cpp b/src/spicelib/devices/hicum2/hicumL2.cpp index 89f662667..99188976a 100644 --- a/src/spicelib/devices/hicum2/hicumL2.cpp +++ b/src/spicelib/devices/hicum2/hicumL2.cpp @@ -498,7 +498,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) //NQS double Qxf_Vxf, Qxf1_Vxf1, Qxf2_Vxf2; // correlated noise - double In1=0.0, In1_Vn1=0.0, In1_Vn2=0.0; // CORRELATED_NOISE + double In1=0.0, In1_Vn1=0.0, In2_Vn2=0.0; // CORRELATED_NOISE double Vn1=0.0, Vn2=0.0; int n_w = 1; @@ -2818,7 +2818,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) // I(bi,ei) <+ ddt(n_w * Vn2); error = NIintegrate(ckt, &geq, &ceq, n_w, here->HICUMqn2); if(error) return(error); - In1_Vn2 = geq; + In2_Vn2 = geq; In1 += *(ckt->CKTstate0 + here->HICUMcqn2); } @@ -3412,7 +3412,7 @@ load: // ############################################################# // ############# STAMP WITH CORRELATED NOISE ################### // ############################################################# - // parameter definitio + // parameter definition double n_1 = Tf*model->HICUMalit; double betadc = it/ibei; double sqrt_n2 = betadc * (2*model->HICUMalqf-model->HICUMalit*model->HICUMalit); @@ -3422,41 +3422,46 @@ load: n_2 = Tf*sqrt(sqrt_n2); } -// Branch: n1 0, Stamp element: Rn1 = 1 Ohm +// Branch: n1 0, Stamp element: Rn1 = -1 Ohm // with respect to Vn1 - *(ckt->CKTrhs + here->HICUMNoise1Node) -= *(ckt->CKTstate0 + here->HICUMvn1); + // VA: I(b_n1) <+ -V(b_n1); + *(here->HICUMn1N1Ptr) -= *(ckt->CKTstate0 + here->HICUMvn1); // finish -// Branch: n2 0, Stamp element: Rn2 = 1 Ohm +// Branch: n2 0, Stamp element: Rn2 = -1 Ohm // with respect to Vn2 - *(ckt->CKTrhs + here->HICUMNoise2Node) -= *(ckt->CKTstate0 + here->HICUMvn2); + // VA: I(b_n2) <+ -V(b_n2); + *(here->HICUMn2N2Ptr) -= *(ckt->CKTstate0 + here->HICUMvn2); // finish // Stamp element: Ibiei f_Bi = + f_Ei = - // realization of modified base shot noise source I1(bi,ei) - // I(bi,ei) <+ n_2/n_w*ddt(n_w* *(ckt->CKTstate0 + here->HICUMvn1)); - rhs_current = n_2/n_w * (*(ckt->CKTstate0 + here->HICUMcqn1) - Vn1 * In1_Vn1); - In1_Vn1 += n_2/n_w*In1_Vn1; + // VA: I(bi,ei) <+ V(b_n1) + n_2/n_w*ddt(n_w*V(b_n1)); + rhs_current = *(ckt->CKTstate0 + here->HICUMvn1); + rhs_current += n_2/n_w * (*(ckt->CKTstate0 + here->HICUMcqn1) - Vn1 * In1_Vn1); - *(ckt->CKTrhs + here->HICUMcollCINode) += -rhs_current; - *(ckt->CKTrhs + here->HICUMemitEINode) += rhs_current; - *(here->HICUMn1N1Ptr) += +In1_Vn1; + *(ckt->CKTrhs + here->HICUMbaseBINode) += rhs_current; + *(ckt->CKTrhs + here->HICUMemitEINode) += -rhs_current; +/* *(here->HICUMn1N1Ptr) += +In1_Vn1; */ +// to check // realization of controlled base noise source I2(bi,ei) - // I(bi,ei) <+ n_1/n_w*ddt(n_w* *(ckt->CKTstate0 + here->HICUMvn2)); - rhs_current = n_2/n_w * (*(ckt->CKTstate0 + here->HICUMcqn1) - Vn2 * In1_Vn2); - In1_Vn2 += n_2/n_w*In1_Vn2; + // VA: I(bi,ei) <+ n_1/n_w*ddt(n_w*V(b_n2)); + rhs_current = n_1/n_w * (*(ckt->CKTstate0 + here->HICUMcqn2) - Vn2 * In2_Vn2); + + *(ckt->CKTrhs + here->HICUMbaseBINode) += rhs_current; + *(ckt->CKTrhs + here->HICUMemitEINode) += -rhs_current; +/* *(here->HICUMn1N2Ptr) += +In1_Vn2; */ +// to check - *(ckt->CKTrhs + here->HICUMcollCINode) += -rhs_current; - *(ckt->CKTrhs + here->HICUMemitEINode) += rhs_current; - *(here->HICUMn1N2Ptr) += +In1_Vn2; -// finish // Stamp element: Iciei f_Ci = + f_Ei = - // realization of modified collector shot noise source I(ci,ei) (uncontrolled) - rhs_current = -*(ckt->CKTstate0 + here->HICUMvn2); - *(ckt->CKTrhs + here->HICUMcollCINode) += -rhs_current; - *(ckt->CKTrhs + here->HICUMemitEINode) += rhs_current; + // VA: I(ci,ei) <+ V(b_n2); + rhs_current = *(ckt->CKTstate0 + here->HICUMvn2); + *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; + *(ckt->CKTrhs + here->HICUMemitEINode) += -rhs_current; +// finish } }