From b75791c87dcd792f830570917128c0e4a6dd89ad Mon Sep 17 00:00:00 2001 From: dwarning Date: Wed, 1 Apr 2020 16:42:57 +0200 Subject: [PATCH] VDMOS include body diode into power calculation --- src/spicelib/devices/vdmos/vdmosask.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/spicelib/devices/vdmos/vdmosask.c b/src/spicelib/devices/vdmos/vdmosask.c index 69accba89..02fcc7e1e 100644 --- a/src/spicelib/devices/vdmos/vdmosask.c +++ b/src/spicelib/devices/vdmos/vdmosask.c @@ -157,23 +157,26 @@ VDMOSask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, strcpy(errMsg,msg); return(E_ASKPOWER); } else { - double temp; + value->rValue = fabs(here->VDMOScd * + (*(ckt->CKTrhsOld + here->VDMOSdNode) - + *(ckt->CKTrhsOld + here->VDMOSsNode))); - value->rValue = here->VDMOScd * - *(ckt->CKTrhsOld + here->VDMOSdNode); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { - value->rValue += (*(ckt->CKTstate0 + here->VDMOScqgd) + - *(ckt->CKTstate0 + here->VDMOScqgs)) * - *(ckt->CKTrhsOld + here->VDMOSgNode); + value->rValue += fabs(*(ckt->CKTstate0 + here->VDMOScqgd) * + (*(ckt->CKTrhsOld + here->VDMOSgNode) - + *(ckt->CKTrhsOld + here->VDMOSdNode))); } - temp = -here->VDMOScd; if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { - temp -= *(ckt->CKTstate0 + here->VDMOScqgd) + - *(ckt->CKTstate0 + here->VDMOScqgs); + value->rValue += fabs(*(ckt->CKTstate0 + here->VDMOScqgs) * + (*(ckt->CKTrhsOld + here->VDMOSgNode) - + *(ckt->CKTrhsOld + here->VDMOSsNode))); } - value->rValue += temp * *(ckt->CKTrhsOld + here->VDMOSsNode); + + value->rValue += fabs(*(ckt->CKTstate0 + here->VDIOcurrent) * + (*(ckt->CKTrhsOld + here->VDMOSdNode) - + *(ckt->CKTrhsOld + here->VDMOSsNode))); } return(OK); default: