From 2bf70fa259d847b9c103a2bbccc39c40fba8db57 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Sat, 7 Apr 2018 18:00:04 +0200 Subject: [PATCH] add matrix entries for bulk diode --- src/spicelib/devices/vdmos/vdmosdefs.h | 11 +++++++++++ src/spicelib/devices/vdmos/vdmosload.c | 7 +++++++ src/spicelib/devices/vdmos/vdmosset.c | 5 +++++ 3 files changed, 23 insertions(+) diff --git a/src/spicelib/devices/vdmos/vdmosdefs.h b/src/spicelib/devices/vdmos/vdmosdefs.h index 5963a3db9..b9fdfee5a 100644 --- a/src/spicelib/devices/vdmos/vdmosdefs.h +++ b/src/spicelib/devices/vdmos/vdmosdefs.h @@ -245,6 +245,17 @@ typedef struct sVDMOSinstance { * (gate node, gate prime node) */ double *VDMOSGPgPtr; /* pointer to sparse matrix element at * (gate prime node, gate node) */ + /* bulk diode */ + double *VDIORPdPtr; /* pointer to sparse matrix element at + * (diode prime node, drain node) */ + double *VDIODrpPtr; /* pointer to sparse matrix element at + * (drain node, diode prime node) */ + double *VDIORPrpPtr; /* pointer to sparse matrix element at + * (diode prime node, diode prime node) */ + double *VDIOSrpPtr; /* pointer to sparse matrix element at + * (source node, diode prime node) */ + double *VDIORPsPtr; /* pointer to sparse matrix element at + * (diode prime node, source node) */ } VDMOSinstance ; diff --git a/src/spicelib/devices/vdmos/vdmosload.c b/src/spicelib/devices/vdmos/vdmosload.c index ec888178e..d6eebf519 100644 --- a/src/spicelib/devices/vdmos/vdmosload.c +++ b/src/spicelib/devices/vdmos/vdmosload.c @@ -886,6 +886,13 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt) *(here->DIOposPrimePosPtr) -= gspr; *(here->DIOposPrimeNegPtr) -= gd; */ + *(here->VDMOSSsPtr) += gspr; + *(here->VDMOSDdPtr) += gd; + *(here->VDIORPrpPtr) += (gd + gspr); + *(here->VDIOSrpPtr) -= gspr; + *(here->VDIODrpPtr) -= gd; + *(here->VDIOSrpPtr) -= gspr; + *(here->VDIORPdPtr) -= gd; } } return(OK); diff --git a/src/spicelib/devices/vdmos/vdmosset.c b/src/spicelib/devices/vdmos/vdmosset.c index 8c8136184..75c5902c3 100644 --- a/src/spicelib/devices/vdmos/vdmosset.c +++ b/src/spicelib/devices/vdmos/vdmosset.c @@ -266,6 +266,11 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ TSTALLOC(VDMOSGgpPtr, VDMOSgNode, VDMOSgNodePrime); TSTALLOC(VDMOSGPgPtr, VDMOSgNodePrime, VDMOSgNode); + TSTALLOC(VDIORPdPtr, VDIOposPrimeNode, VDMOSdNode); + TSTALLOC(VDIODrpPtr, VDMOSdNode, VDIOposPrimeNode); + TSTALLOC(VDIOSrpPtr, VDMOSsNode, VDIOposPrimeNode); + TSTALLOC(VDIORPsPtr, VDIOposPrimeNode, VDMOSsNode); + TSTALLOC(VDIORPrpPtr, VDIOposPrimeNode, VDIOposPrimeNode); } } return(OK);