Fixed Rg(V) for the KCL Verification

This commit is contained in:
Francesco Lannutti 2013-07-02 15:21:30 +02:00
parent 23b1480d9b
commit c05cb7a437
3 changed files with 34 additions and 27 deletions

View File

@ -5341,7 +5341,6 @@ line900:
}
#ifdef KIRCHHOFF
///////////////////////////////////////////
/* KCL - Non-Linear and Dynamic Linear Parts */
ceqgdtot_fvk_dNodePrime = (- gdtotd * *(ckt->CKTrhsOld+here->BSIM4dNodePrime)
@ -5359,19 +5358,14 @@ line900:
*(here->KCLcurrentdNodePrimeRHS_5) = m * ceqqd_fvk ;
*(here->KCLcurrentdNodePrimeRHS_6) = -(m * Idtoteq_fvk) ;
*(ckt->CKTfvk+here->BSIM4gNodePrime) += m * (ceqqg_fvk - ceqgcrg + Igtoteq_fvk) ;
*(ckt->CKTfvk+here->BSIM4gNodePrime) += m * (ceqqg_fvk + Igtoteq_fvk) ;
*(here->KCLcurrentgNodePrimeRHS_1) = m * ceqqg_fvk ;
*(here->KCLcurrentgNodePrimeRHS_2) = -(m * ceqgcrg) ;
*(here->KCLcurrentgNodePrimeRHS_3) = m * Igtoteq_fvk ;
*(here->KCLcurrentgNodePrimeRHS_2) = m * Igtoteq_fvk ;
if (here->BSIM4rgateMod == 2)
if (here->BSIM4rgateMod == 3)
{
*(ckt->CKTfvk+here->BSIM4gNodeExt) += m * ceqgcrg ;
*(here->KCLcurrentgNodeExtRHS) = m * ceqgcrg ;
} else if (here->BSIM4rgateMod == 3) {
*(ckt->CKTfvk+here->BSIM4gNodeMid) += m * (ceqqgmid_fvk + ceqgcrg) ;
*(here->KCLcurrentgNodeMidRHS_1) = m * ceqqgmid_fvk ;
*(here->KCLcurrentgNodeMidRHS_2) = m * ceqgcrg ;
*(ckt->CKTfvk+here->BSIM4gNodeMid) += m * ceqqgmid_fvk ;
*(here->KCLcurrentgNodeMidRHS) = m * ceqqgmid_fvk ;
}
ceqgstot_fvk_sNodePrime = (- gstotd * *(ckt->CKTrhsOld+here->BSIM4dNodePrime)
@ -5487,12 +5481,24 @@ line900:
*(ckt->CKTfvk+here->BSIM4gNodePrime) -= m * geltd * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodePrime)) ;
*(here->KCLcurrentgNodePrime) = -(m * geltd * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodePrime))) ;
} else if (here->BSIM4rgateMod == 2) {
*(ckt->CKTfvk+here->BSIM4gNodeExt) += m * gcrg * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodePrime)) ;
*(here->KCLcurrentgNodeExt) = m * gcrg * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodePrime)) ;
*(ckt->CKTfvk+here->BSIM4gNodePrime) -= m * gcrg * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodePrime)) ;
*(here->KCLcurrentgNodePrime) = -(m * gcrg * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodePrime))) ;
} else if (here->BSIM4rgateMod == 3) {
*(ckt->CKTfvk+here->BSIM4gNodeExt) += m * geltd * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodeMid)) ;
*(here->KCLcurrentgNodeExt) = m * geltd * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodeMid)) ;
*(ckt->CKTfvk+here->BSIM4gNodeMid) -= m * geltd * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodeMid)) ;
*(here->KCLcurrentgNodeMid) = -(m * geltd * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodeMid))) ;
*(here->KCLcurrentgNodeMid_1) = -(m * geltd * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodeMid))) ;
*(ckt->CKTfvk+here->BSIM4gNodeMid) += m * gcrg * (*(ckt->CKTrhsOld+here->BSIM4gNodeMid) - *(ckt->CKTrhsOld+here->BSIM4gNodePrime)) ;
*(here->KCLcurrentgNodeMid_2) = m * gcrg * (*(ckt->CKTrhsOld+here->BSIM4gNodeMid) - *(ckt->CKTrhsOld+here->BSIM4gNodePrime)) ;
*(ckt->CKTfvk+here->BSIM4gNodePrime) -= m * gcrg * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodePrime)) ;
*(here->KCLcurrentgNodePrime) = -(m * gcrg * (*(ckt->CKTrhsOld+here->BSIM4gNodeExt) - *(ckt->CKTrhsOld+here->BSIM4gNodePrime))) ;
}
if (here->BSIM4rbodyMod)

View File

@ -65,14 +65,10 @@ BSIM4nodeIsNonLinear (GENmodel *inModel, CKTcircuit *ckt)
error = CKTmkCurKCL (ckt, here->BSIM4gNodePrime, &(here->KCLcurrentgNodePrimeRHS_1)) ;
error = CKTmkCurKCL (ckt, here->BSIM4gNodePrime, &(here->KCLcurrentgNodePrimeRHS_2)) ;
error = CKTmkCurKCL (ckt, here->BSIM4gNodePrime, &(here->KCLcurrentgNodePrimeRHS_3)) ;
if (here->BSIM4rgateMod == 2)
if (here->BSIM4rgateMod == 3)
{
error = CKTmkCurKCL (ckt, here->BSIM4gNodeExt, &(here->KCLcurrentgNodeExtRHS)) ;
} else if (here->BSIM4rgateMod == 3) {
error = CKTmkCurKCL (ckt, here->BSIM4gNodeMid, &(here->KCLcurrentgNodeMidRHS_1)) ;
error = CKTmkCurKCL (ckt, here->BSIM4gNodeMid, &(here->KCLcurrentgNodeMidRHS_2)) ;
error = CKTmkCurKCL (ckt, here->BSIM4gNodeMid, &(here->KCLcurrentgNodeMidRHS)) ;
}
if (!here->BSIM4rbodyMod)
@ -137,16 +133,20 @@ BSIM4nodeIsNonLinear (GENmodel *inModel, CKTcircuit *ckt)
error = CKTmkCurKCL (ckt, here->BSIM4dNode, &(here->KCLcurrentdNode)) ;
error = CKTmkCurKCL (ckt, here->BSIM4sNodePrime, &(here->KCLcurrentsNodePrime)) ;
error = CKTmkCurKCL (ckt, here->BSIM4sNode, &(here->KCLcurrentsNode)) ;
} else {
}
if (here->BSIM4rgateMod == 1)
{
error = CKTmkCurKCL (ckt, here->BSIM4gNodeExt, &(here->KCLcurrentgNodeExt)) ;
error = CKTmkCurKCL (ckt, here->BSIM4gNodePrime, &(here->KCLcurrentgNodePrime)) ;
} else if (here->BSIM4rgateMod == 2) {
error = CKTmkCurKCL (ckt, here->BSIM4gNodeExt, &(here->KCLcurrentgNodeExt)) ;
error = CKTmkCurKCL (ckt, here->BSIM4gNodePrime, &(here->KCLcurrentgNodePrime)) ;
} else if (here->BSIM4rgateMod == 3) {
error = CKTmkCurKCL (ckt, here->BSIM4gNodeExt, &(here->KCLcurrentgNodeExt)) ;
error = CKTmkCurKCL (ckt, here->BSIM4gNodeMid, &(here->KCLcurrentgNodeMid)) ;
error = CKTmkCurKCL (ckt, here->BSIM4gNodeMid, &(here->KCLcurrentgNodeMid_1)) ;
error = CKTmkCurKCL (ckt, here->BSIM4gNodeMid, &(here->KCLcurrentgNodeMid_2)) ;
error = CKTmkCurKCL (ckt, here->BSIM4gNodePrime, &(here->KCLcurrentgNodePrime)) ;
}
if (here->BSIM4rbodyMod)

View File

@ -580,12 +580,8 @@ typedef struct sBSIM4instance
double *KCLcurrentgNodePrimeRHS_1 ;
double *KCLcurrentgNodePrimeRHS_2 ;
double *KCLcurrentgNodePrimeRHS_3 ;
double *KCLcurrentgNodeExtRHS ;
double *KCLcurrentgNodeMidRHS_1 ;
double *KCLcurrentgNodeMidRHS_2 ;
double *KCLcurrentgNodeMidRHS ;
double *KCLcurrentbNodePrimeRHS_1 ;
double *KCLcurrentbNodePrimeRHS_2 ;
@ -624,9 +620,14 @@ typedef struct sBSIM4instance
double *KCLcurrentdNode ;
double *KCLcurrentsNodePrime ;
double *KCLcurrentsNode ;
double *KCLcurrentgNodePrime ;
double *KCLcurrentgNodeMid ;
double *KCLcurrentgNodeExt ;
double *KCLcurrentgNodePrime ;
double *KCLcurrentgNodeMid_1 ;
double *KCLcurrentgNodeMid_2 ;
double *KCLcurrentdbNode_1 ;
double *KCLcurrentdbNode_2 ;
double *KCLcurrentbNodePrime_1 ;