From eaf67ac9403c3cdbb24a2d505ace516e2affdbc4 Mon Sep 17 00:00:00 2001 From: dwarning Date: Fri, 29 Apr 2022 11:07:56 +0200 Subject: [PATCH] correct pnp type bipolar transistor current convention --- src/spicelib/devices/bjt/bjtask.c | 8 ++++---- src/spicelib/devices/hicum2/hicum2ask.c | 6 ++++-- src/spicelib/devices/vbic/vbicask.c | 4 ++++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/spicelib/devices/bjt/bjtask.c b/src/spicelib/devices/bjt/bjtask.c index 9b87a2b10..112f734d2 100644 --- a/src/spicelib/devices/bjt/bjtask.c +++ b/src/spicelib/devices/bjt/bjtask.c @@ -94,7 +94,7 @@ BJTask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue return(OK); case BJT_QUEST_CC: value->rValue = *(ckt->CKTstate0 + here->BJTcc); - value->rValue *= here->BJTm; + value->rValue *= here->BJTm * BJTmodPtr(here)->BJTtype; return(OK); case BJT_QUEST_CB: value->rValue = *(ckt->CKTstate0 + here->BJTcb); @@ -105,7 +105,7 @@ BJTask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue value->rValue -= *(ckt->CKTstate0 + here->BJTcqsub); } } - value->rValue *= here->BJTm; + value->rValue *= here->BJTm * BJTmodPtr(here)->BJTtype; return(OK); case BJT_QUEST_GPI: value->rValue = *(ckt->CKTstate0 + here->BJTgpi); @@ -255,7 +255,7 @@ BJTask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue (*(ckt->CKTstate0 + here->BJTcqsub) + *(ckt->CKTstate0 + here->BJTcdsub))); } - value->rValue *= here->BJTm; + value->rValue *= here->BJTm * BJTmodPtr(here)->BJTtype; return(OK); case BJT_QUEST_CE : if (ckt->CKTcurrentAnalysis & DOING_AC) { @@ -274,7 +274,7 @@ BJTask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue } } } - value->rValue *= here->BJTm; + value->rValue *= here->BJTm * BJTmodPtr(here)->BJTtype; return(OK); case BJT_QUEST_POWER : if (ckt->CKTcurrentAnalysis & DOING_AC) { diff --git a/src/spicelib/devices/hicum2/hicum2ask.c b/src/spicelib/devices/hicum2/hicum2ask.c index 1b0de43ac..4fb6d89d7 100644 --- a/src/spicelib/devices/hicum2/hicum2ask.c +++ b/src/spicelib/devices/hicum2/hicum2ask.c @@ -99,26 +99,29 @@ HICUMask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFval return(OK); /* currents */ case HICUM_QUEST_CC: - // value->rValue = 0.0; value->rValue = *(ckt->CKTstate0 + here->HICUMiciei) - *(ckt->CKTstate0 + here->HICUMibici) - *(ckt->CKTstate0 + here->HICUMibpci) - *(ckt->CKTstate0 + here->HICUMisici); + value->rValue *= HICUMmodPtr(here)->HICUMtype; return(OK); case HICUM_QUEST_CB: value->rValue = *(ckt->CKTstate0 + here->HICUMibiei) + *(ckt->CKTstate0 + here->HICUMibici) + *(ckt->CKTstate0 + here->HICUMibpci) + *(ckt->CKTstate0 + here->HICUMibpsi); + value->rValue *= HICUMmodPtr(here)->HICUMtype; return(OK); case HICUM_QUEST_CE: value->rValue = - *(ckt->CKTstate0 + here->HICUMibiei) - *(ckt->CKTstate0 + here->HICUMibpei) - *(ckt->CKTstate0 + here->HICUMiciei); + value->rValue *= HICUMmodPtr(here)->HICUMtype; return(OK); case HICUM_QUEST_CS: value->rValue = *(ckt->CKTstate0 + here->HICUMisici) - *(ckt->CKTstate0 + here->HICUMibpsi); + value->rValue *= HICUMmodPtr(here)->HICUMtype; return(OK); case HICUM_QUEST_CAVL: value->rValue = here->HICUMiavl; @@ -129,7 +132,6 @@ HICUMask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFval case HICUM_QUEST_CBCI: value->rValue = *(ckt->CKTstate0 + here->HICUMibici); return(OK); - /* resistances */ case HICUM_QUEST_RCX_T: value->rValue = here->HICUMrcx_t.rpart; diff --git a/src/spicelib/devices/vbic/vbicask.c b/src/spicelib/devices/vbic/vbicask.c index c6e22f68a..877ed7a4f 100644 --- a/src/spicelib/devices/vbic/vbicask.c +++ b/src/spicelib/devices/vbic/vbicask.c @@ -78,6 +78,7 @@ VBICask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalu value->rValue = *(ckt->CKTstate0 + here->VBICitzf) - *(ckt->CKTstate0 + here->VBICitzr) - *(ckt->CKTstate0 + here->VBICibc); + value->rValue *= VBICmodPtr(here)->VBICtype; return(OK); case VBIC_QUEST_CB: value->rValue = *(ckt->CKTstate0 + here->VBICibe) + @@ -85,16 +86,19 @@ VBICask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalu *(ckt->CKTstate0 + here->VBICibex) + *(ckt->CKTstate0 + here->VBICibep) + *(ckt->CKTstate0 + here->VBICiccp); + value->rValue *= VBICmodPtr(here)->VBICtype; return(OK); case VBIC_QUEST_CE: value->rValue = - *(ckt->CKTstate0 + here->VBICibe) - *(ckt->CKTstate0 + here->VBICibex) - *(ckt->CKTstate0 + here->VBICitzf) + *(ckt->CKTstate0 + here->VBICitzr); + value->rValue *= VBICmodPtr(here)->VBICtype; return(OK); case VBIC_QUEST_CS: value->rValue = *(ckt->CKTstate0 + here->VBICiccp) - *(ckt->CKTstate0 + here->VBICibcp); + value->rValue *= VBICmodPtr(here)->VBICtype; return(OK); case VBIC_QUEST_POWER: VBICask(ckt, instPtr, VBIC_QUEST_CC, &IC, select);