From ef0b33fdde7a7db798bdac35f6db062f3cb2ef06 Mon Sep 17 00:00:00 2001 From: pnenzi Date: Tue, 6 Feb 2001 18:05:18 +0000 Subject: [PATCH] Removed a bug in the model that caused different results in repeated analyses. --- src/spicelib/devices/bsim3/b3mpar.c | 3277 ++++++++++++++------------- src/spicelib/devices/bsim3/b3set.c | 1924 ++++++++-------- 2 files changed, 2611 insertions(+), 2590 deletions(-) diff --git a/src/spicelib/devices/bsim3/b3mpar.c b/src/spicelib/devices/bsim3/b3mpar.c index 708a7664d..7ba57a744 100644 --- a/src/spicelib/devices/bsim3/b3mpar.c +++ b/src/spicelib/devices/bsim3/b3mpar.c @@ -14,1662 +14,1663 @@ File: b3mpar.c int -BSIM3mParam(param,value,inMod) -int param; -IFvalue *value; -GENmodel *inMod; +BSIM3mParam (param, value, inMod) + int param; + IFvalue *value; + GENmodel *inMod; { - BSIM3model *mod = (BSIM3model*)inMod; - switch(param) - { case BSIM3_MOD_MOBMOD : - mod->BSIM3mobMod = value->iValue; - mod->BSIM3mobModGiven = TRUE; - break; - case BSIM3_MOD_BINUNIT : - mod->BSIM3binUnit = value->iValue; - mod->BSIM3binUnitGiven = TRUE; - break; - case BSIM3_MOD_PARAMCHK : - mod->BSIM3paramChk = value->iValue; - mod->BSIM3paramChkGiven = TRUE; - break; - case BSIM3_MOD_CAPMOD : - mod->BSIM3capMod = value->iValue; - mod->BSIM3capModGiven = TRUE; - break; - case BSIM3_MOD_NOIMOD : - mod->BSIM3noiMod = value->iValue; - mod->BSIM3noiModGiven = TRUE; - break; - case BSIM3_MOD_VERSION : - mod->BSIM3version = value->sValue; - mod->BSIM3versionGiven = TRUE; - break; - case BSIM3_MOD_TOX : - mod->BSIM3tox = value->rValue; - mod->BSIM3toxGiven = TRUE; - break; - case BSIM3_MOD_TOXM : - mod->BSIM3toxm = value->rValue; - mod->BSIM3toxmGiven = TRUE; - break; + BSIM3model *mod = (BSIM3model *) inMod; + switch (param) + { + case BSIM3_MOD_MOBMOD: + mod->BSIM3mobMod = value->iValue; + mod->BSIM3mobModGiven = TRUE; + break; + case BSIM3_MOD_BINUNIT: + mod->BSIM3binUnit = value->iValue; + mod->BSIM3binUnitGiven = TRUE; + break; + case BSIM3_MOD_PARAMCHK: + mod->BSIM3paramChk = value->iValue; + mod->BSIM3paramChkGiven = TRUE; + break; + case BSIM3_MOD_CAPMOD: + mod->BSIM3capMod = value->iValue; + mod->BSIM3capModGiven = TRUE; + break; + case BSIM3_MOD_NOIMOD: + mod->BSIM3noiMod = value->iValue; + mod->BSIM3noiModGiven = TRUE; + break; + case BSIM3_MOD_VERSION: + mod->BSIM3version = value->sValue; + mod->BSIM3versionGiven = TRUE; + break; + case BSIM3_MOD_TOX: + mod->BSIM3tox = value->rValue; + mod->BSIM3toxGiven = TRUE; + break; + case BSIM3_MOD_TOXM: + mod->BSIM3toxm = value->rValue; + mod->BSIM3toxmGiven = TRUE; + break; - case BSIM3_MOD_CDSC : - mod->BSIM3cdsc = value->rValue; - mod->BSIM3cdscGiven = TRUE; - break; - case BSIM3_MOD_CDSCB : - mod->BSIM3cdscb = value->rValue; - mod->BSIM3cdscbGiven = TRUE; - break; + case BSIM3_MOD_CDSC: + mod->BSIM3cdsc = value->rValue; + mod->BSIM3cdscGiven = TRUE; + break; + case BSIM3_MOD_CDSCB: + mod->BSIM3cdscb = value->rValue; + mod->BSIM3cdscbGiven = TRUE; + break; - case BSIM3_MOD_CDSCD : - mod->BSIM3cdscd = value->rValue; - mod->BSIM3cdscdGiven = TRUE; - break; + case BSIM3_MOD_CDSCD: + mod->BSIM3cdscd = value->rValue; + mod->BSIM3cdscdGiven = TRUE; + break; - case BSIM3_MOD_CIT : - mod->BSIM3cit = value->rValue; - mod->BSIM3citGiven = TRUE; - break; - case BSIM3_MOD_NFACTOR : - mod->BSIM3nfactor = value->rValue; - mod->BSIM3nfactorGiven = TRUE; - break; - case BSIM3_MOD_XJ: - mod->BSIM3xj = value->rValue; - mod->BSIM3xjGiven = TRUE; - break; - case BSIM3_MOD_VSAT: - mod->BSIM3vsat = value->rValue; - mod->BSIM3vsatGiven = TRUE; - break; - case BSIM3_MOD_A0: - mod->BSIM3a0 = value->rValue; - mod->BSIM3a0Given = TRUE; - break; - - case BSIM3_MOD_AGS: - mod->BSIM3ags= value->rValue; - mod->BSIM3agsGiven = TRUE; - break; - - case BSIM3_MOD_A1: - mod->BSIM3a1 = value->rValue; - mod->BSIM3a1Given = TRUE; - break; - case BSIM3_MOD_A2: - mod->BSIM3a2 = value->rValue; - mod->BSIM3a2Given = TRUE; - break; - case BSIM3_MOD_AT: - mod->BSIM3at = value->rValue; - mod->BSIM3atGiven = TRUE; - break; - case BSIM3_MOD_KETA: - mod->BSIM3keta = value->rValue; - mod->BSIM3ketaGiven = TRUE; - break; - case BSIM3_MOD_NSUB: - mod->BSIM3nsub = value->rValue; - mod->BSIM3nsubGiven = TRUE; - break; - case BSIM3_MOD_NPEAK: - mod->BSIM3npeak = value->rValue; - mod->BSIM3npeakGiven = TRUE; - if (mod->BSIM3npeak > 1.0e20) - mod->BSIM3npeak *= 1.0e-6; - break; - case BSIM3_MOD_NGATE: - mod->BSIM3ngate = value->rValue; - mod->BSIM3ngateGiven = TRUE; - if (mod->BSIM3ngate > 1.0e23) - mod->BSIM3ngate *= 1.0e-6; - break; - case BSIM3_MOD_GAMMA1: - mod->BSIM3gamma1 = value->rValue; - mod->BSIM3gamma1Given = TRUE; - break; - case BSIM3_MOD_GAMMA2: - mod->BSIM3gamma2 = value->rValue; - mod->BSIM3gamma2Given = TRUE; - break; - case BSIM3_MOD_VBX: - mod->BSIM3vbx = value->rValue; - mod->BSIM3vbxGiven = TRUE; - break; - case BSIM3_MOD_VBM: - mod->BSIM3vbm = value->rValue; - mod->BSIM3vbmGiven = TRUE; - break; - case BSIM3_MOD_XT: - mod->BSIM3xt = value->rValue; - mod->BSIM3xtGiven = TRUE; - break; - case BSIM3_MOD_K1: - mod->BSIM3k1 = value->rValue; - mod->BSIM3k1Given = TRUE; - break; - case BSIM3_MOD_KT1: - mod->BSIM3kt1 = value->rValue; - mod->BSIM3kt1Given = TRUE; - break; - case BSIM3_MOD_KT1L: - mod->BSIM3kt1l = value->rValue; - mod->BSIM3kt1lGiven = TRUE; - break; - case BSIM3_MOD_KT2: - mod->BSIM3kt2 = value->rValue; - mod->BSIM3kt2Given = TRUE; - break; - case BSIM3_MOD_K2: - mod->BSIM3k2 = value->rValue; - mod->BSIM3k2Given = TRUE; - break; - case BSIM3_MOD_K3: - mod->BSIM3k3 = value->rValue; - mod->BSIM3k3Given = TRUE; - break; - case BSIM3_MOD_K3B: - mod->BSIM3k3b = value->rValue; - mod->BSIM3k3bGiven = TRUE; - break; - case BSIM3_MOD_NLX: - mod->BSIM3nlx = value->rValue; - mod->BSIM3nlxGiven = TRUE; - break; - case BSIM3_MOD_W0: - mod->BSIM3w0 = value->rValue; - mod->BSIM3w0Given = TRUE; - break; - case BSIM3_MOD_DVT0: - mod->BSIM3dvt0 = value->rValue; - mod->BSIM3dvt0Given = TRUE; - break; - case BSIM3_MOD_DVT1: - mod->BSIM3dvt1 = value->rValue; - mod->BSIM3dvt1Given = TRUE; - break; - case BSIM3_MOD_DVT2: - mod->BSIM3dvt2 = value->rValue; - mod->BSIM3dvt2Given = TRUE; - break; - case BSIM3_MOD_DVT0W: - mod->BSIM3dvt0w = value->rValue; - mod->BSIM3dvt0wGiven = TRUE; - break; - case BSIM3_MOD_DVT1W: - mod->BSIM3dvt1w = value->rValue; - mod->BSIM3dvt1wGiven = TRUE; - break; - case BSIM3_MOD_DVT2W: - mod->BSIM3dvt2w = value->rValue; - mod->BSIM3dvt2wGiven = TRUE; - break; - case BSIM3_MOD_DROUT: - mod->BSIM3drout = value->rValue; - mod->BSIM3droutGiven = TRUE; - break; - case BSIM3_MOD_DSUB: - mod->BSIM3dsub = value->rValue; - mod->BSIM3dsubGiven = TRUE; - break; - case BSIM3_MOD_VTH0: - mod->BSIM3vth0 = value->rValue; - mod->BSIM3vth0Given = TRUE; - break; - case BSIM3_MOD_UA: - mod->BSIM3ua = value->rValue; - mod->BSIM3uaGiven = TRUE; - break; - case BSIM3_MOD_UA1: - mod->BSIM3ua1 = value->rValue; - mod->BSIM3ua1Given = TRUE; - break; - case BSIM3_MOD_UB: - mod->BSIM3ub = value->rValue; - mod->BSIM3ubGiven = TRUE; - break; - case BSIM3_MOD_UB1: - mod->BSIM3ub1 = value->rValue; - mod->BSIM3ub1Given = TRUE; - break; - case BSIM3_MOD_UC: - mod->BSIM3uc = value->rValue; - mod->BSIM3ucGiven = TRUE; - break; - case BSIM3_MOD_UC1: - mod->BSIM3uc1 = value->rValue; - mod->BSIM3uc1Given = TRUE; - break; - case BSIM3_MOD_U0 : - mod->BSIM3u0 = value->rValue; - mod->BSIM3u0Given = TRUE; - break; - case BSIM3_MOD_UTE : - mod->BSIM3ute = value->rValue; - mod->BSIM3uteGiven = TRUE; - break; - case BSIM3_MOD_VOFF: - mod->BSIM3voff = value->rValue; - mod->BSIM3voffGiven = TRUE; - break; - case BSIM3_MOD_DELTA : - mod->BSIM3delta = value->rValue; - mod->BSIM3deltaGiven = TRUE; - break; - case BSIM3_MOD_RDSW: - mod->BSIM3rdsw = value->rValue; - mod->BSIM3rdswGiven = TRUE; - break; - case BSIM3_MOD_PRWG: - mod->BSIM3prwg = value->rValue; - mod->BSIM3prwgGiven = TRUE; - break; - case BSIM3_MOD_PRWB: - mod->BSIM3prwb = value->rValue; - mod->BSIM3prwbGiven = TRUE; - break; - case BSIM3_MOD_PRT: - mod->BSIM3prt = value->rValue; - mod->BSIM3prtGiven = TRUE; - break; - case BSIM3_MOD_ETA0: - mod->BSIM3eta0 = value->rValue; - mod->BSIM3eta0Given = TRUE; - break; - case BSIM3_MOD_ETAB: - mod->BSIM3etab = value->rValue; - mod->BSIM3etabGiven = TRUE; - break; - case BSIM3_MOD_PCLM: - mod->BSIM3pclm = value->rValue; - mod->BSIM3pclmGiven = TRUE; - break; - case BSIM3_MOD_PDIBL1: - mod->BSIM3pdibl1 = value->rValue; - mod->BSIM3pdibl1Given = TRUE; - break; - case BSIM3_MOD_PDIBL2: - mod->BSIM3pdibl2 = value->rValue; - mod->BSIM3pdibl2Given = TRUE; - break; - case BSIM3_MOD_PDIBLB: - mod->BSIM3pdiblb = value->rValue; - mod->BSIM3pdiblbGiven = TRUE; - break; - case BSIM3_MOD_PSCBE1: - mod->BSIM3pscbe1 = value->rValue; - mod->BSIM3pscbe1Given = TRUE; - break; - case BSIM3_MOD_PSCBE2: - mod->BSIM3pscbe2 = value->rValue; - mod->BSIM3pscbe2Given = TRUE; - break; - case BSIM3_MOD_PVAG: - mod->BSIM3pvag = value->rValue; - mod->BSIM3pvagGiven = TRUE; - break; - case BSIM3_MOD_WR : - mod->BSIM3wr = value->rValue; - mod->BSIM3wrGiven = TRUE; - break; - case BSIM3_MOD_DWG : - mod->BSIM3dwg = value->rValue; - mod->BSIM3dwgGiven = TRUE; - break; - case BSIM3_MOD_DWB : - mod->BSIM3dwb = value->rValue; - mod->BSIM3dwbGiven = TRUE; - break; - case BSIM3_MOD_B0 : - mod->BSIM3b0 = value->rValue; - mod->BSIM3b0Given = TRUE; - break; - case BSIM3_MOD_B1 : - mod->BSIM3b1 = value->rValue; - mod->BSIM3b1Given = TRUE; - break; - case BSIM3_MOD_ALPHA0 : - mod->BSIM3alpha0 = value->rValue; - mod->BSIM3alpha0Given = TRUE; - break; - case BSIM3_MOD_ALPHA1 : - mod->BSIM3alpha1 = value->rValue; - mod->BSIM3alpha1Given = TRUE; - break; - case BSIM3_MOD_BETA0 : - mod->BSIM3beta0 = value->rValue; - mod->BSIM3beta0Given = TRUE; - break; - case BSIM3_MOD_IJTH : - mod->BSIM3ijth = value->rValue; - mod->BSIM3ijthGiven = TRUE; - break; - case BSIM3_MOD_VFB : - mod->BSIM3vfb = value->rValue; - mod->BSIM3vfbGiven = TRUE; - break; + case BSIM3_MOD_CIT: + mod->BSIM3cit = value->rValue; + mod->BSIM3citGiven = TRUE; + break; + case BSIM3_MOD_NFACTOR: + mod->BSIM3nfactor = value->rValue; + mod->BSIM3nfactorGiven = TRUE; + break; + case BSIM3_MOD_XJ: + mod->BSIM3xj = value->rValue; + mod->BSIM3xjGiven = TRUE; + break; + case BSIM3_MOD_VSAT: + mod->BSIM3vsat = value->rValue; + mod->BSIM3vsatGiven = TRUE; + break; + case BSIM3_MOD_A0: + mod->BSIM3a0 = value->rValue; + mod->BSIM3a0Given = TRUE; + break; - case BSIM3_MOD_ELM : - mod->BSIM3elm = value->rValue; - mod->BSIM3elmGiven = TRUE; - break; - case BSIM3_MOD_CGSL : - mod->BSIM3cgsl = value->rValue; - mod->BSIM3cgslGiven = TRUE; - break; - case BSIM3_MOD_CGDL : - mod->BSIM3cgdl = value->rValue; - mod->BSIM3cgdlGiven = TRUE; - break; - case BSIM3_MOD_CKAPPA : - mod->BSIM3ckappa = value->rValue; - mod->BSIM3ckappaGiven = TRUE; - break; - case BSIM3_MOD_CF : - mod->BSIM3cf = value->rValue; - mod->BSIM3cfGiven = TRUE; - break; - case BSIM3_MOD_CLC : - mod->BSIM3clc = value->rValue; - mod->BSIM3clcGiven = TRUE; - break; - case BSIM3_MOD_CLE : - mod->BSIM3cle = value->rValue; - mod->BSIM3cleGiven = TRUE; - break; - case BSIM3_MOD_DWC : - mod->BSIM3dwc = value->rValue; - mod->BSIM3dwcGiven = TRUE; - break; - case BSIM3_MOD_DLC : - mod->BSIM3dlc = value->rValue; - mod->BSIM3dlcGiven = TRUE; - break; - case BSIM3_MOD_VFBCV : - mod->BSIM3vfbcv = value->rValue; - mod->BSIM3vfbcvGiven = TRUE; - break; - case BSIM3_MOD_ACDE : - mod->BSIM3acde = value->rValue; - mod->BSIM3acdeGiven = TRUE; - break; - case BSIM3_MOD_MOIN : - mod->BSIM3moin = value->rValue; - mod->BSIM3moinGiven = TRUE; - break; - case BSIM3_MOD_NOFF : - mod->BSIM3noff = value->rValue; - mod->BSIM3noffGiven = TRUE; - break; - case BSIM3_MOD_VOFFCV : - mod->BSIM3voffcv = value->rValue; - mod->BSIM3voffcvGiven = TRUE; - break; - case BSIM3_MOD_TCJ : - mod->BSIM3tcj = value->rValue; - mod->BSIM3tcjGiven = TRUE; - break; - case BSIM3_MOD_TPB : - mod->BSIM3tpb = value->rValue; - mod->BSIM3tpbGiven = TRUE; - break; - case BSIM3_MOD_TCJSW : - mod->BSIM3tcjsw = value->rValue; - mod->BSIM3tcjswGiven = TRUE; - break; - case BSIM3_MOD_TPBSW : - mod->BSIM3tpbsw = value->rValue; - mod->BSIM3tpbswGiven = TRUE; - break; - case BSIM3_MOD_TCJSWG : - mod->BSIM3tcjswg = value->rValue; - mod->BSIM3tcjswgGiven = TRUE; - break; - case BSIM3_MOD_TPBSWG : - mod->BSIM3tpbswg = value->rValue; - mod->BSIM3tpbswgGiven = TRUE; - break; + case BSIM3_MOD_AGS: + mod->BSIM3ags = value->rValue; + mod->BSIM3agsGiven = TRUE; + break; - /* Length dependence */ - case BSIM3_MOD_LCDSC : - mod->BSIM3lcdsc = value->rValue; - mod->BSIM3lcdscGiven = TRUE; - break; + case BSIM3_MOD_A1: + mod->BSIM3a1 = value->rValue; + mod->BSIM3a1Given = TRUE; + break; + case BSIM3_MOD_A2: + mod->BSIM3a2 = value->rValue; + mod->BSIM3a2Given = TRUE; + break; + case BSIM3_MOD_AT: + mod->BSIM3at = value->rValue; + mod->BSIM3atGiven = TRUE; + break; + case BSIM3_MOD_KETA: + mod->BSIM3keta = value->rValue; + mod->BSIM3ketaGiven = TRUE; + break; + case BSIM3_MOD_NSUB: + mod->BSIM3nsub = value->rValue; + mod->BSIM3nsubGiven = TRUE; + break; + case BSIM3_MOD_NPEAK: + mod->BSIM3npeak = value->rValue; + mod->BSIM3npeakGiven = TRUE; + if (mod->BSIM3npeak > 1.0e20) + mod->BSIM3npeak *= 1.0e-6; + break; + case BSIM3_MOD_NGATE: + mod->BSIM3ngate = value->rValue; + mod->BSIM3ngateGiven = TRUE; + if (mod->BSIM3ngate > 1.0e23) + mod->BSIM3ngate *= 1.0e-6; + break; + case BSIM3_MOD_GAMMA1: + mod->BSIM3gamma1 = value->rValue; + mod->BSIM3gamma1Given = TRUE; + break; + case BSIM3_MOD_GAMMA2: + mod->BSIM3gamma2 = value->rValue; + mod->BSIM3gamma2Given = TRUE; + break; + case BSIM3_MOD_VBX: + mod->BSIM3vbx = value->rValue; + mod->BSIM3vbxGiven = TRUE; + break; + case BSIM3_MOD_VBM: + mod->BSIM3vbm = value->rValue; + mod->BSIM3vbmGiven = TRUE; + break; + case BSIM3_MOD_XT: + mod->BSIM3xt = value->rValue; + mod->BSIM3xtGiven = TRUE; + break; + case BSIM3_MOD_K1: + mod->BSIM3k1 = value->rValue; + mod->BSIM3k1Given = TRUE; + break; + case BSIM3_MOD_KT1: + mod->BSIM3kt1 = value->rValue; + mod->BSIM3kt1Given = TRUE; + break; + case BSIM3_MOD_KT1L: + mod->BSIM3kt1l = value->rValue; + mod->BSIM3kt1lGiven = TRUE; + break; + case BSIM3_MOD_KT2: + mod->BSIM3kt2 = value->rValue; + mod->BSIM3kt2Given = TRUE; + break; + case BSIM3_MOD_K2: + mod->BSIM3k2 = value->rValue; + mod->BSIM3k2Given = TRUE; + break; + case BSIM3_MOD_K3: + mod->BSIM3k3 = value->rValue; + mod->BSIM3k3Given = TRUE; + break; + case BSIM3_MOD_K3B: + mod->BSIM3k3b = value->rValue; + mod->BSIM3k3bGiven = TRUE; + break; + case BSIM3_MOD_NLX: + mod->BSIM3nlx = value->rValue; + mod->BSIM3nlxGiven = TRUE; + break; + case BSIM3_MOD_W0: + mod->BSIM3w0 = value->rValue; + mod->BSIM3w0Given = TRUE; + break; + case BSIM3_MOD_DVT0: + mod->BSIM3dvt0 = value->rValue; + mod->BSIM3dvt0Given = TRUE; + break; + case BSIM3_MOD_DVT1: + mod->BSIM3dvt1 = value->rValue; + mod->BSIM3dvt1Given = TRUE; + break; + case BSIM3_MOD_DVT2: + mod->BSIM3dvt2 = value->rValue; + mod->BSIM3dvt2Given = TRUE; + break; + case BSIM3_MOD_DVT0W: + mod->BSIM3dvt0w = value->rValue; + mod->BSIM3dvt0wGiven = TRUE; + break; + case BSIM3_MOD_DVT1W: + mod->BSIM3dvt1w = value->rValue; + mod->BSIM3dvt1wGiven = TRUE; + break; + case BSIM3_MOD_DVT2W: + mod->BSIM3dvt2w = value->rValue; + mod->BSIM3dvt2wGiven = TRUE; + break; + case BSIM3_MOD_DROUT: + mod->BSIM3drout = value->rValue; + mod->BSIM3droutGiven = TRUE; + break; + case BSIM3_MOD_DSUB: + mod->BSIM3dsub = value->rValue; + mod->BSIM3dsubGiven = TRUE; + break; + case BSIM3_MOD_VTH0: + mod->BSIM3vth0 = value->rValue; + mod->BSIM3vth0Given = TRUE; + break; + case BSIM3_MOD_UA: + mod->BSIM3ua = value->rValue; + mod->BSIM3uaGiven = TRUE; + break; + case BSIM3_MOD_UA1: + mod->BSIM3ua1 = value->rValue; + mod->BSIM3ua1Given = TRUE; + break; + case BSIM3_MOD_UB: + mod->BSIM3ub = value->rValue; + mod->BSIM3ubGiven = TRUE; + break; + case BSIM3_MOD_UB1: + mod->BSIM3ub1 = value->rValue; + mod->BSIM3ub1Given = TRUE; + break; + case BSIM3_MOD_UC: + mod->BSIM3uc = value->rValue; + mod->BSIM3ucGiven = TRUE; + break; + case BSIM3_MOD_UC1: + mod->BSIM3uc1 = value->rValue; + mod->BSIM3uc1Given = TRUE; + break; + case BSIM3_MOD_U0: + mod->BSIM3u0 = value->rValue; + mod->BSIM3u0Given = TRUE; + break; + case BSIM3_MOD_UTE: + mod->BSIM3ute = value->rValue; + mod->BSIM3uteGiven = TRUE; + break; + case BSIM3_MOD_VOFF: + mod->BSIM3voff = value->rValue; + mod->BSIM3voffGiven = TRUE; + break; + case BSIM3_MOD_DELTA: + mod->BSIM3delta = value->rValue; + mod->BSIM3deltaGiven = TRUE; + break; + case BSIM3_MOD_RDSW: + mod->BSIM3rdsw = value->rValue; + mod->BSIM3rdswGiven = TRUE; + break; + case BSIM3_MOD_PRWG: + mod->BSIM3prwg = value->rValue; + mod->BSIM3prwgGiven = TRUE; + break; + case BSIM3_MOD_PRWB: + mod->BSIM3prwb = value->rValue; + mod->BSIM3prwbGiven = TRUE; + break; + case BSIM3_MOD_PRT: + mod->BSIM3prt = value->rValue; + mod->BSIM3prtGiven = TRUE; + break; + case BSIM3_MOD_ETA0: + mod->BSIM3eta0 = value->rValue; + mod->BSIM3eta0Given = TRUE; + break; + case BSIM3_MOD_ETAB: + mod->BSIM3etab = value->rValue; + mod->BSIM3etabGiven = TRUE; + break; + case BSIM3_MOD_PCLM: + mod->BSIM3pclm = value->rValue; + mod->BSIM3pclmGiven = TRUE; + break; + case BSIM3_MOD_PDIBL1: + mod->BSIM3pdibl1 = value->rValue; + mod->BSIM3pdibl1Given = TRUE; + break; + case BSIM3_MOD_PDIBL2: + mod->BSIM3pdibl2 = value->rValue; + mod->BSIM3pdibl2Given = TRUE; + break; + case BSIM3_MOD_PDIBLB: + mod->BSIM3pdiblb = value->rValue; + mod->BSIM3pdiblbGiven = TRUE; + break; + case BSIM3_MOD_PSCBE1: + mod->BSIM3pscbe1 = value->rValue; + mod->BSIM3pscbe1Given = TRUE; + break; + case BSIM3_MOD_PSCBE2: + mod->BSIM3pscbe2 = value->rValue; + mod->BSIM3pscbe2Given = TRUE; + break; + case BSIM3_MOD_PVAG: + mod->BSIM3pvag = value->rValue; + mod->BSIM3pvagGiven = TRUE; + break; + case BSIM3_MOD_WR: + mod->BSIM3wr = value->rValue; + mod->BSIM3wrGiven = TRUE; + break; + case BSIM3_MOD_DWG: + mod->BSIM3dwg = value->rValue; + mod->BSIM3dwgGiven = TRUE; + break; + case BSIM3_MOD_DWB: + mod->BSIM3dwb = value->rValue; + mod->BSIM3dwbGiven = TRUE; + break; + case BSIM3_MOD_B0: + mod->BSIM3b0 = value->rValue; + mod->BSIM3b0Given = TRUE; + break; + case BSIM3_MOD_B1: + mod->BSIM3b1 = value->rValue; + mod->BSIM3b1Given = TRUE; + break; + case BSIM3_MOD_ALPHA0: + mod->BSIM3alpha0 = value->rValue; + mod->BSIM3alpha0Given = TRUE; + break; + case BSIM3_MOD_ALPHA1: + mod->BSIM3alpha1 = value->rValue; + mod->BSIM3alpha1Given = TRUE; + break; + case BSIM3_MOD_BETA0: + mod->BSIM3beta0 = value->rValue; + mod->BSIM3beta0Given = TRUE; + break; + case BSIM3_MOD_IJTH: + mod->BSIM3ijth = value->rValue; + mod->BSIM3ijthGiven = TRUE; + break; + case BSIM3_MOD_VFB: + mod->BSIM3vfb = value->rValue; + mod->BSIM3vfbGiven = TRUE; + break; + + case BSIM3_MOD_ELM: + mod->BSIM3elm = value->rValue; + mod->BSIM3elmGiven = TRUE; + break; + case BSIM3_MOD_CGSL: + mod->BSIM3cgsl = value->rValue; + mod->BSIM3cgslGiven = TRUE; + break; + case BSIM3_MOD_CGDL: + mod->BSIM3cgdl = value->rValue; + mod->BSIM3cgdlGiven = TRUE; + break; + case BSIM3_MOD_CKAPPA: + mod->BSIM3ckappa = value->rValue; + mod->BSIM3ckappaGiven = TRUE; + break; + case BSIM3_MOD_CF: + mod->BSIM3cf = value->rValue; + mod->BSIM3cfGiven = TRUE; + break; + case BSIM3_MOD_CLC: + mod->BSIM3clc = value->rValue; + mod->BSIM3clcGiven = TRUE; + break; + case BSIM3_MOD_CLE: + mod->BSIM3cle = value->rValue; + mod->BSIM3cleGiven = TRUE; + break; + case BSIM3_MOD_DWC: + mod->BSIM3dwc = value->rValue; + mod->BSIM3dwcGiven = TRUE; + break; + case BSIM3_MOD_DLC: + mod->BSIM3dlc = value->rValue; + mod->BSIM3dlcGiven = TRUE; + break; + case BSIM3_MOD_VFBCV: + mod->BSIM3vfbcv = value->rValue; + mod->BSIM3vfbcvGiven = TRUE; + break; + case BSIM3_MOD_ACDE: + mod->BSIM3acde = value->rValue; + mod->BSIM3acdeGiven = TRUE; + break; + case BSIM3_MOD_MOIN: + mod->BSIM3moin = value->rValue; + mod->BSIM3moinGiven = TRUE; + break; + case BSIM3_MOD_NOFF: + mod->BSIM3noff = value->rValue; + mod->BSIM3noffGiven = TRUE; + break; + case BSIM3_MOD_VOFFCV: + mod->BSIM3voffcv = value->rValue; + mod->BSIM3voffcvGiven = TRUE; + break; + case BSIM3_MOD_TCJ: + mod->BSIM3tcj = value->rValue; + mod->BSIM3tcjGiven = TRUE; + break; + case BSIM3_MOD_TPB: + mod->BSIM3tpb = value->rValue; + mod->BSIM3tpbGiven = TRUE; + break; + case BSIM3_MOD_TCJSW: + mod->BSIM3tcjsw = value->rValue; + mod->BSIM3tcjswGiven = TRUE; + break; + case BSIM3_MOD_TPBSW: + mod->BSIM3tpbsw = value->rValue; + mod->BSIM3tpbswGiven = TRUE; + break; + case BSIM3_MOD_TCJSWG: + mod->BSIM3tcjswg = value->rValue; + mod->BSIM3tcjswgGiven = TRUE; + break; + case BSIM3_MOD_TPBSWG: + mod->BSIM3tpbswg = value->rValue; + mod->BSIM3tpbswgGiven = TRUE; + break; + + /* Length dependence */ + case BSIM3_MOD_LCDSC: + mod->BSIM3lcdsc = value->rValue; + mod->BSIM3lcdscGiven = TRUE; + break; - case BSIM3_MOD_LCDSCB : - mod->BSIM3lcdscb = value->rValue; - mod->BSIM3lcdscbGiven = TRUE; - break; - case BSIM3_MOD_LCDSCD : - mod->BSIM3lcdscd = value->rValue; - mod->BSIM3lcdscdGiven = TRUE; - break; - case BSIM3_MOD_LCIT : - mod->BSIM3lcit = value->rValue; - mod->BSIM3lcitGiven = TRUE; - break; - case BSIM3_MOD_LNFACTOR : - mod->BSIM3lnfactor = value->rValue; - mod->BSIM3lnfactorGiven = TRUE; - break; - case BSIM3_MOD_LXJ: - mod->BSIM3lxj = value->rValue; - mod->BSIM3lxjGiven = TRUE; - break; - case BSIM3_MOD_LVSAT: - mod->BSIM3lvsat = value->rValue; - mod->BSIM3lvsatGiven = TRUE; - break; - - - case BSIM3_MOD_LA0: - mod->BSIM3la0 = value->rValue; - mod->BSIM3la0Given = TRUE; - break; - case BSIM3_MOD_LAGS: - mod->BSIM3lags = value->rValue; - mod->BSIM3lagsGiven = TRUE; - break; - case BSIM3_MOD_LA1: - mod->BSIM3la1 = value->rValue; - mod->BSIM3la1Given = TRUE; - break; - case BSIM3_MOD_LA2: - mod->BSIM3la2 = value->rValue; - mod->BSIM3la2Given = TRUE; - break; - case BSIM3_MOD_LAT: - mod->BSIM3lat = value->rValue; - mod->BSIM3latGiven = TRUE; - break; - case BSIM3_MOD_LKETA: - mod->BSIM3lketa = value->rValue; - mod->BSIM3lketaGiven = TRUE; - break; - case BSIM3_MOD_LNSUB: - mod->BSIM3lnsub = value->rValue; - mod->BSIM3lnsubGiven = TRUE; - break; - case BSIM3_MOD_LNPEAK: - mod->BSIM3lnpeak = value->rValue; - mod->BSIM3lnpeakGiven = TRUE; - if (mod->BSIM3lnpeak > 1.0e20) - mod->BSIM3lnpeak *= 1.0e-6; - break; - case BSIM3_MOD_LNGATE: - mod->BSIM3lngate = value->rValue; - mod->BSIM3lngateGiven = TRUE; - if (mod->BSIM3lngate > 1.0e23) - mod->BSIM3lngate *= 1.0e-6; - break; - case BSIM3_MOD_LGAMMA1: - mod->BSIM3lgamma1 = value->rValue; - mod->BSIM3lgamma1Given = TRUE; - break; - case BSIM3_MOD_LGAMMA2: - mod->BSIM3lgamma2 = value->rValue; - mod->BSIM3lgamma2Given = TRUE; - break; - case BSIM3_MOD_LVBX: - mod->BSIM3lvbx = value->rValue; - mod->BSIM3lvbxGiven = TRUE; - break; - case BSIM3_MOD_LVBM: - mod->BSIM3lvbm = value->rValue; - mod->BSIM3lvbmGiven = TRUE; - break; - case BSIM3_MOD_LXT: - mod->BSIM3lxt = value->rValue; - mod->BSIM3lxtGiven = TRUE; - break; - case BSIM3_MOD_LK1: - mod->BSIM3lk1 = value->rValue; - mod->BSIM3lk1Given = TRUE; - break; - case BSIM3_MOD_LKT1: - mod->BSIM3lkt1 = value->rValue; - mod->BSIM3lkt1Given = TRUE; - break; - case BSIM3_MOD_LKT1L: - mod->BSIM3lkt1l = value->rValue; - mod->BSIM3lkt1lGiven = TRUE; - break; - case BSIM3_MOD_LKT2: - mod->BSIM3lkt2 = value->rValue; - mod->BSIM3lkt2Given = TRUE; - break; - case BSIM3_MOD_LK2: - mod->BSIM3lk2 = value->rValue; - mod->BSIM3lk2Given = TRUE; - break; - case BSIM3_MOD_LK3: - mod->BSIM3lk3 = value->rValue; - mod->BSIM3lk3Given = TRUE; - break; - case BSIM3_MOD_LK3B: - mod->BSIM3lk3b = value->rValue; - mod->BSIM3lk3bGiven = TRUE; - break; - case BSIM3_MOD_LNLX: - mod->BSIM3lnlx = value->rValue; - mod->BSIM3lnlxGiven = TRUE; - break; - case BSIM3_MOD_LW0: - mod->BSIM3lw0 = value->rValue; - mod->BSIM3lw0Given = TRUE; - break; - case BSIM3_MOD_LDVT0: - mod->BSIM3ldvt0 = value->rValue; - mod->BSIM3ldvt0Given = TRUE; - break; - case BSIM3_MOD_LDVT1: - mod->BSIM3ldvt1 = value->rValue; - mod->BSIM3ldvt1Given = TRUE; - break; - case BSIM3_MOD_LDVT2: - mod->BSIM3ldvt2 = value->rValue; - mod->BSIM3ldvt2Given = TRUE; - break; - case BSIM3_MOD_LDVT0W: - mod->BSIM3ldvt0w = value->rValue; - mod->BSIM3ldvt0wGiven = TRUE; - break; - case BSIM3_MOD_LDVT1W: - mod->BSIM3ldvt1w = value->rValue; - mod->BSIM3ldvt1wGiven = TRUE; - break; - case BSIM3_MOD_LDVT2W: - mod->BSIM3ldvt2w = value->rValue; - mod->BSIM3ldvt2wGiven = TRUE; - break; - case BSIM3_MOD_LDROUT: - mod->BSIM3ldrout = value->rValue; - mod->BSIM3ldroutGiven = TRUE; - break; - case BSIM3_MOD_LDSUB: - mod->BSIM3ldsub = value->rValue; - mod->BSIM3ldsubGiven = TRUE; - break; - case BSIM3_MOD_LVTH0: - mod->BSIM3lvth0 = value->rValue; - mod->BSIM3lvth0Given = TRUE; - break; - case BSIM3_MOD_LUA: - mod->BSIM3lua = value->rValue; - mod->BSIM3luaGiven = TRUE; - break; - case BSIM3_MOD_LUA1: - mod->BSIM3lua1 = value->rValue; - mod->BSIM3lua1Given = TRUE; - break; - case BSIM3_MOD_LUB: - mod->BSIM3lub = value->rValue; - mod->BSIM3lubGiven = TRUE; - break; - case BSIM3_MOD_LUB1: - mod->BSIM3lub1 = value->rValue; - mod->BSIM3lub1Given = TRUE; - break; - case BSIM3_MOD_LUC: - mod->BSIM3luc = value->rValue; - mod->BSIM3lucGiven = TRUE; - break; - case BSIM3_MOD_LUC1: - mod->BSIM3luc1 = value->rValue; - mod->BSIM3luc1Given = TRUE; - break; - case BSIM3_MOD_LU0 : - mod->BSIM3lu0 = value->rValue; - mod->BSIM3lu0Given = TRUE; - break; - case BSIM3_MOD_LUTE : - mod->BSIM3lute = value->rValue; - mod->BSIM3luteGiven = TRUE; - break; - case BSIM3_MOD_LVOFF: - mod->BSIM3lvoff = value->rValue; - mod->BSIM3lvoffGiven = TRUE; - break; - case BSIM3_MOD_LDELTA : - mod->BSIM3ldelta = value->rValue; - mod->BSIM3ldeltaGiven = TRUE; - break; - case BSIM3_MOD_LRDSW: - mod->BSIM3lrdsw = value->rValue; - mod->BSIM3lrdswGiven = TRUE; - break; - case BSIM3_MOD_LPRWB: - mod->BSIM3lprwb = value->rValue; - mod->BSIM3lprwbGiven = TRUE; - break; - case BSIM3_MOD_LPRWG: - mod->BSIM3lprwg = value->rValue; - mod->BSIM3lprwgGiven = TRUE; - break; - case BSIM3_MOD_LPRT: - mod->BSIM3lprt = value->rValue; - mod->BSIM3lprtGiven = TRUE; - break; - case BSIM3_MOD_LETA0: - mod->BSIM3leta0 = value->rValue; - mod->BSIM3leta0Given = TRUE; - break; - case BSIM3_MOD_LETAB: - mod->BSIM3letab = value->rValue; - mod->BSIM3letabGiven = TRUE; - break; - case BSIM3_MOD_LPCLM: - mod->BSIM3lpclm = value->rValue; - mod->BSIM3lpclmGiven = TRUE; - break; - case BSIM3_MOD_LPDIBL1: - mod->BSIM3lpdibl1 = value->rValue; - mod->BSIM3lpdibl1Given = TRUE; - break; - case BSIM3_MOD_LPDIBL2: - mod->BSIM3lpdibl2 = value->rValue; - mod->BSIM3lpdibl2Given = TRUE; - break; - case BSIM3_MOD_LPDIBLB: - mod->BSIM3lpdiblb = value->rValue; - mod->BSIM3lpdiblbGiven = TRUE; - break; - case BSIM3_MOD_LPSCBE1: - mod->BSIM3lpscbe1 = value->rValue; - mod->BSIM3lpscbe1Given = TRUE; - break; - case BSIM3_MOD_LPSCBE2: - mod->BSIM3lpscbe2 = value->rValue; - mod->BSIM3lpscbe2Given = TRUE; - break; - case BSIM3_MOD_LPVAG: - mod->BSIM3lpvag = value->rValue; - mod->BSIM3lpvagGiven = TRUE; - break; - case BSIM3_MOD_LWR : - mod->BSIM3lwr = value->rValue; - mod->BSIM3lwrGiven = TRUE; - break; - case BSIM3_MOD_LDWG : - mod->BSIM3ldwg = value->rValue; - mod->BSIM3ldwgGiven = TRUE; - break; - case BSIM3_MOD_LDWB : - mod->BSIM3ldwb = value->rValue; - mod->BSIM3ldwbGiven = TRUE; - break; - case BSIM3_MOD_LB0 : - mod->BSIM3lb0 = value->rValue; - mod->BSIM3lb0Given = TRUE; - break; - case BSIM3_MOD_LB1 : - mod->BSIM3lb1 = value->rValue; - mod->BSIM3lb1Given = TRUE; - break; - case BSIM3_MOD_LALPHA0 : - mod->BSIM3lalpha0 = value->rValue; - mod->BSIM3lalpha0Given = TRUE; - break; - case BSIM3_MOD_LALPHA1 : - mod->BSIM3lalpha1 = value->rValue; - mod->BSIM3lalpha1Given = TRUE; - break; - case BSIM3_MOD_LBETA0 : - mod->BSIM3lbeta0 = value->rValue; - mod->BSIM3lbeta0Given = TRUE; - break; - case BSIM3_MOD_LVFB : - mod->BSIM3lvfb = value->rValue; - mod->BSIM3lvfbGiven = TRUE; - break; - - case BSIM3_MOD_LELM : - mod->BSIM3lelm = value->rValue; - mod->BSIM3lelmGiven = TRUE; - break; - case BSIM3_MOD_LCGSL : - mod->BSIM3lcgsl = value->rValue; - mod->BSIM3lcgslGiven = TRUE; - break; - case BSIM3_MOD_LCGDL : - mod->BSIM3lcgdl = value->rValue; - mod->BSIM3lcgdlGiven = TRUE; - break; - case BSIM3_MOD_LCKAPPA : - mod->BSIM3lckappa = value->rValue; - mod->BSIM3lckappaGiven = TRUE; - break; - case BSIM3_MOD_LCF : - mod->BSIM3lcf = value->rValue; - mod->BSIM3lcfGiven = TRUE; - break; - case BSIM3_MOD_LCLC : - mod->BSIM3lclc = value->rValue; - mod->BSIM3lclcGiven = TRUE; - break; - case BSIM3_MOD_LCLE : - mod->BSIM3lcle = value->rValue; - mod->BSIM3lcleGiven = TRUE; - break; - case BSIM3_MOD_LVFBCV : - mod->BSIM3lvfbcv = value->rValue; - mod->BSIM3lvfbcvGiven = TRUE; - break; - case BSIM3_MOD_LACDE : - mod->BSIM3lacde = value->rValue; - mod->BSIM3lacdeGiven = TRUE; - break; - case BSIM3_MOD_LMOIN : - mod->BSIM3lmoin = value->rValue; - mod->BSIM3lmoinGiven = TRUE; - break; - case BSIM3_MOD_LNOFF : - mod->BSIM3lnoff = value->rValue; - mod->BSIM3lnoffGiven = TRUE; - break; - case BSIM3_MOD_LVOFFCV : - mod->BSIM3lvoffcv = value->rValue; - mod->BSIM3lvoffcvGiven = TRUE; - break; - - /* Width dependence */ - case BSIM3_MOD_WCDSC : - mod->BSIM3wcdsc = value->rValue; - mod->BSIM3wcdscGiven = TRUE; - break; - - - case BSIM3_MOD_WCDSCB : - mod->BSIM3wcdscb = value->rValue; - mod->BSIM3wcdscbGiven = TRUE; - break; - case BSIM3_MOD_WCDSCD : - mod->BSIM3wcdscd = value->rValue; - mod->BSIM3wcdscdGiven = TRUE; - break; - case BSIM3_MOD_WCIT : - mod->BSIM3wcit = value->rValue; - mod->BSIM3wcitGiven = TRUE; - break; - case BSIM3_MOD_WNFACTOR : - mod->BSIM3wnfactor = value->rValue; - mod->BSIM3wnfactorGiven = TRUE; - break; - case BSIM3_MOD_WXJ: - mod->BSIM3wxj = value->rValue; - mod->BSIM3wxjGiven = TRUE; - break; - case BSIM3_MOD_WVSAT: - mod->BSIM3wvsat = value->rValue; - mod->BSIM3wvsatGiven = TRUE; - break; + case BSIM3_MOD_LCDSCB: + mod->BSIM3lcdscb = value->rValue; + mod->BSIM3lcdscbGiven = TRUE; + break; + case BSIM3_MOD_LCDSCD: + mod->BSIM3lcdscd = value->rValue; + mod->BSIM3lcdscdGiven = TRUE; + break; + case BSIM3_MOD_LCIT: + mod->BSIM3lcit = value->rValue; + mod->BSIM3lcitGiven = TRUE; + break; + case BSIM3_MOD_LNFACTOR: + mod->BSIM3lnfactor = value->rValue; + mod->BSIM3lnfactorGiven = TRUE; + break; + case BSIM3_MOD_LXJ: + mod->BSIM3lxj = value->rValue; + mod->BSIM3lxjGiven = TRUE; + break; + case BSIM3_MOD_LVSAT: + mod->BSIM3lvsat = value->rValue; + mod->BSIM3lvsatGiven = TRUE; + break; - case BSIM3_MOD_WA0: - mod->BSIM3wa0 = value->rValue; - mod->BSIM3wa0Given = TRUE; - break; - case BSIM3_MOD_WAGS: - mod->BSIM3wags = value->rValue; - mod->BSIM3wagsGiven = TRUE; - break; - case BSIM3_MOD_WA1: - mod->BSIM3wa1 = value->rValue; - mod->BSIM3wa1Given = TRUE; - break; - case BSIM3_MOD_WA2: - mod->BSIM3wa2 = value->rValue; - mod->BSIM3wa2Given = TRUE; - break; - case BSIM3_MOD_WAT: - mod->BSIM3wat = value->rValue; - mod->BSIM3watGiven = TRUE; - break; - case BSIM3_MOD_WKETA: - mod->BSIM3wketa = value->rValue; - mod->BSIM3wketaGiven = TRUE; - break; - case BSIM3_MOD_WNSUB: - mod->BSIM3wnsub = value->rValue; - mod->BSIM3wnsubGiven = TRUE; - break; - case BSIM3_MOD_WNPEAK: - mod->BSIM3wnpeak = value->rValue; - mod->BSIM3wnpeakGiven = TRUE; - if (mod->BSIM3wnpeak > 1.0e20) - mod->BSIM3wnpeak *= 1.0e-6; - break; - case BSIM3_MOD_WNGATE: - mod->BSIM3wngate = value->rValue; - mod->BSIM3wngateGiven = TRUE; - if (mod->BSIM3wngate > 1.0e23) - mod->BSIM3wngate *= 1.0e-6; - break; - case BSIM3_MOD_WGAMMA1: - mod->BSIM3wgamma1 = value->rValue; - mod->BSIM3wgamma1Given = TRUE; - break; - case BSIM3_MOD_WGAMMA2: - mod->BSIM3wgamma2 = value->rValue; - mod->BSIM3wgamma2Given = TRUE; - break; - case BSIM3_MOD_WVBX: - mod->BSIM3wvbx = value->rValue; - mod->BSIM3wvbxGiven = TRUE; - break; - case BSIM3_MOD_WVBM: - mod->BSIM3wvbm = value->rValue; - mod->BSIM3wvbmGiven = TRUE; - break; - case BSIM3_MOD_WXT: - mod->BSIM3wxt = value->rValue; - mod->BSIM3wxtGiven = TRUE; - break; - case BSIM3_MOD_WK1: - mod->BSIM3wk1 = value->rValue; - mod->BSIM3wk1Given = TRUE; - break; - case BSIM3_MOD_WKT1: - mod->BSIM3wkt1 = value->rValue; - mod->BSIM3wkt1Given = TRUE; - break; - case BSIM3_MOD_WKT1L: - mod->BSIM3wkt1l = value->rValue; - mod->BSIM3wkt1lGiven = TRUE; - break; - case BSIM3_MOD_WKT2: - mod->BSIM3wkt2 = value->rValue; - mod->BSIM3wkt2Given = TRUE; - break; - case BSIM3_MOD_WK2: - mod->BSIM3wk2 = value->rValue; - mod->BSIM3wk2Given = TRUE; - break; - case BSIM3_MOD_WK3: - mod->BSIM3wk3 = value->rValue; - mod->BSIM3wk3Given = TRUE; - break; - case BSIM3_MOD_WK3B: - mod->BSIM3wk3b = value->rValue; - mod->BSIM3wk3bGiven = TRUE; - break; - case BSIM3_MOD_WNLX: - mod->BSIM3wnlx = value->rValue; - mod->BSIM3wnlxGiven = TRUE; - break; - case BSIM3_MOD_WW0: - mod->BSIM3ww0 = value->rValue; - mod->BSIM3ww0Given = TRUE; - break; - case BSIM3_MOD_WDVT0: - mod->BSIM3wdvt0 = value->rValue; - mod->BSIM3wdvt0Given = TRUE; - break; - case BSIM3_MOD_WDVT1: - mod->BSIM3wdvt1 = value->rValue; - mod->BSIM3wdvt1Given = TRUE; - break; - case BSIM3_MOD_WDVT2: - mod->BSIM3wdvt2 = value->rValue; - mod->BSIM3wdvt2Given = TRUE; - break; - case BSIM3_MOD_WDVT0W: - mod->BSIM3wdvt0w = value->rValue; - mod->BSIM3wdvt0wGiven = TRUE; - break; - case BSIM3_MOD_WDVT1W: - mod->BSIM3wdvt1w = value->rValue; - mod->BSIM3wdvt1wGiven = TRUE; - break; - case BSIM3_MOD_WDVT2W: - mod->BSIM3wdvt2w = value->rValue; - mod->BSIM3wdvt2wGiven = TRUE; - break; - case BSIM3_MOD_WDROUT: - mod->BSIM3wdrout = value->rValue; - mod->BSIM3wdroutGiven = TRUE; - break; - case BSIM3_MOD_WDSUB: - mod->BSIM3wdsub = value->rValue; - mod->BSIM3wdsubGiven = TRUE; - break; - case BSIM3_MOD_WVTH0: - mod->BSIM3wvth0 = value->rValue; - mod->BSIM3wvth0Given = TRUE; - break; - case BSIM3_MOD_WUA: - mod->BSIM3wua = value->rValue; - mod->BSIM3wuaGiven = TRUE; - break; - case BSIM3_MOD_WUA1: - mod->BSIM3wua1 = value->rValue; - mod->BSIM3wua1Given = TRUE; - break; - case BSIM3_MOD_WUB: - mod->BSIM3wub = value->rValue; - mod->BSIM3wubGiven = TRUE; - break; - case BSIM3_MOD_WUB1: - mod->BSIM3wub1 = value->rValue; - mod->BSIM3wub1Given = TRUE; - break; - case BSIM3_MOD_WUC: - mod->BSIM3wuc = value->rValue; - mod->BSIM3wucGiven = TRUE; - break; - case BSIM3_MOD_WUC1: - mod->BSIM3wuc1 = value->rValue; - mod->BSIM3wuc1Given = TRUE; - break; - case BSIM3_MOD_WU0 : - mod->BSIM3wu0 = value->rValue; - mod->BSIM3wu0Given = TRUE; - break; - case BSIM3_MOD_WUTE : - mod->BSIM3wute = value->rValue; - mod->BSIM3wuteGiven = TRUE; - break; - case BSIM3_MOD_WVOFF: - mod->BSIM3wvoff = value->rValue; - mod->BSIM3wvoffGiven = TRUE; - break; - case BSIM3_MOD_WDELTA : - mod->BSIM3wdelta = value->rValue; - mod->BSIM3wdeltaGiven = TRUE; - break; - case BSIM3_MOD_WRDSW: - mod->BSIM3wrdsw = value->rValue; - mod->BSIM3wrdswGiven = TRUE; - break; - case BSIM3_MOD_WPRWB: - mod->BSIM3wprwb = value->rValue; - mod->BSIM3wprwbGiven = TRUE; - break; - case BSIM3_MOD_WPRWG: - mod->BSIM3wprwg = value->rValue; - mod->BSIM3wprwgGiven = TRUE; - break; - case BSIM3_MOD_WPRT: - mod->BSIM3wprt = value->rValue; - mod->BSIM3wprtGiven = TRUE; - break; - case BSIM3_MOD_WETA0: - mod->BSIM3weta0 = value->rValue; - mod->BSIM3weta0Given = TRUE; - break; - case BSIM3_MOD_WETAB: - mod->BSIM3wetab = value->rValue; - mod->BSIM3wetabGiven = TRUE; - break; - case BSIM3_MOD_WPCLM: - mod->BSIM3wpclm = value->rValue; - mod->BSIM3wpclmGiven = TRUE; - break; - case BSIM3_MOD_WPDIBL1: - mod->BSIM3wpdibl1 = value->rValue; - mod->BSIM3wpdibl1Given = TRUE; - break; - case BSIM3_MOD_WPDIBL2: - mod->BSIM3wpdibl2 = value->rValue; - mod->BSIM3wpdibl2Given = TRUE; - break; - case BSIM3_MOD_WPDIBLB: - mod->BSIM3wpdiblb = value->rValue; - mod->BSIM3wpdiblbGiven = TRUE; - break; - case BSIM3_MOD_WPSCBE1: - mod->BSIM3wpscbe1 = value->rValue; - mod->BSIM3wpscbe1Given = TRUE; - break; - case BSIM3_MOD_WPSCBE2: - mod->BSIM3wpscbe2 = value->rValue; - mod->BSIM3wpscbe2Given = TRUE; - break; - case BSIM3_MOD_WPVAG: - mod->BSIM3wpvag = value->rValue; - mod->BSIM3wpvagGiven = TRUE; - break; - case BSIM3_MOD_WWR : - mod->BSIM3wwr = value->rValue; - mod->BSIM3wwrGiven = TRUE; - break; - case BSIM3_MOD_WDWG : - mod->BSIM3wdwg = value->rValue; - mod->BSIM3wdwgGiven = TRUE; - break; - case BSIM3_MOD_WDWB : - mod->BSIM3wdwb = value->rValue; - mod->BSIM3wdwbGiven = TRUE; - break; - case BSIM3_MOD_WB0 : - mod->BSIM3wb0 = value->rValue; - mod->BSIM3wb0Given = TRUE; - break; - case BSIM3_MOD_WB1 : - mod->BSIM3wb1 = value->rValue; - mod->BSIM3wb1Given = TRUE; - break; - case BSIM3_MOD_WALPHA0 : - mod->BSIM3walpha0 = value->rValue; - mod->BSIM3walpha0Given = TRUE; - break; - case BSIM3_MOD_WALPHA1 : - mod->BSIM3walpha1 = value->rValue; - mod->BSIM3walpha1Given = TRUE; - break; - case BSIM3_MOD_WBETA0 : - mod->BSIM3wbeta0 = value->rValue; - mod->BSIM3wbeta0Given = TRUE; - break; - case BSIM3_MOD_WVFB : - mod->BSIM3wvfb = value->rValue; - mod->BSIM3wvfbGiven = TRUE; - break; + case BSIM3_MOD_LA0: + mod->BSIM3la0 = value->rValue; + mod->BSIM3la0Given = TRUE; + break; + case BSIM3_MOD_LAGS: + mod->BSIM3lags = value->rValue; + mod->BSIM3lagsGiven = TRUE; + break; + case BSIM3_MOD_LA1: + mod->BSIM3la1 = value->rValue; + mod->BSIM3la1Given = TRUE; + break; + case BSIM3_MOD_LA2: + mod->BSIM3la2 = value->rValue; + mod->BSIM3la2Given = TRUE; + break; + case BSIM3_MOD_LAT: + mod->BSIM3lat = value->rValue; + mod->BSIM3latGiven = TRUE; + break; + case BSIM3_MOD_LKETA: + mod->BSIM3lketa = value->rValue; + mod->BSIM3lketaGiven = TRUE; + break; + case BSIM3_MOD_LNSUB: + mod->BSIM3lnsub = value->rValue; + mod->BSIM3lnsubGiven = TRUE; + break; + case BSIM3_MOD_LNPEAK: + mod->BSIM3lnpeak = value->rValue; + mod->BSIM3lnpeakGiven = TRUE; + if (mod->BSIM3lnpeak > 1.0e20) + mod->BSIM3lnpeak *= 1.0e-6; + break; + case BSIM3_MOD_LNGATE: + mod->BSIM3lngate = value->rValue; + mod->BSIM3lngateGiven = TRUE; + if (mod->BSIM3lngate > 1.0e23) + mod->BSIM3lngate *= 1.0e-6; + break; + case BSIM3_MOD_LGAMMA1: + mod->BSIM3lgamma1 = value->rValue; + mod->BSIM3lgamma1Given = TRUE; + break; + case BSIM3_MOD_LGAMMA2: + mod->BSIM3lgamma2 = value->rValue; + mod->BSIM3lgamma2Given = TRUE; + break; + case BSIM3_MOD_LVBX: + mod->BSIM3lvbx = value->rValue; + mod->BSIM3lvbxGiven = TRUE; + break; + case BSIM3_MOD_LVBM: + mod->BSIM3lvbm = value->rValue; + mod->BSIM3lvbmGiven = TRUE; + break; + case BSIM3_MOD_LXT: + mod->BSIM3lxt = value->rValue; + mod->BSIM3lxtGiven = TRUE; + break; + case BSIM3_MOD_LK1: + mod->BSIM3lk1 = value->rValue; + mod->BSIM3lk1Given = TRUE; + break; + case BSIM3_MOD_LKT1: + mod->BSIM3lkt1 = value->rValue; + mod->BSIM3lkt1Given = TRUE; + break; + case BSIM3_MOD_LKT1L: + mod->BSIM3lkt1l = value->rValue; + mod->BSIM3lkt1lGiven = TRUE; + break; + case BSIM3_MOD_LKT2: + mod->BSIM3lkt2 = value->rValue; + mod->BSIM3lkt2Given = TRUE; + break; + case BSIM3_MOD_LK2: + mod->BSIM3lk2 = value->rValue; + mod->BSIM3lk2Given = TRUE; + break; + case BSIM3_MOD_LK3: + mod->BSIM3lk3 = value->rValue; + mod->BSIM3lk3Given = TRUE; + break; + case BSIM3_MOD_LK3B: + mod->BSIM3lk3b = value->rValue; + mod->BSIM3lk3bGiven = TRUE; + break; + case BSIM3_MOD_LNLX: + mod->BSIM3lnlx = value->rValue; + mod->BSIM3lnlxGiven = TRUE; + break; + case BSIM3_MOD_LW0: + mod->BSIM3lw0 = value->rValue; + mod->BSIM3lw0Given = TRUE; + break; + case BSIM3_MOD_LDVT0: + mod->BSIM3ldvt0 = value->rValue; + mod->BSIM3ldvt0Given = TRUE; + break; + case BSIM3_MOD_LDVT1: + mod->BSIM3ldvt1 = value->rValue; + mod->BSIM3ldvt1Given = TRUE; + break; + case BSIM3_MOD_LDVT2: + mod->BSIM3ldvt2 = value->rValue; + mod->BSIM3ldvt2Given = TRUE; + break; + case BSIM3_MOD_LDVT0W: + mod->BSIM3ldvt0w = value->rValue; + mod->BSIM3ldvt0wGiven = TRUE; + break; + case BSIM3_MOD_LDVT1W: + mod->BSIM3ldvt1w = value->rValue; + mod->BSIM3ldvt1wGiven = TRUE; + break; + case BSIM3_MOD_LDVT2W: + mod->BSIM3ldvt2w = value->rValue; + mod->BSIM3ldvt2wGiven = TRUE; + break; + case BSIM3_MOD_LDROUT: + mod->BSIM3ldrout = value->rValue; + mod->BSIM3ldroutGiven = TRUE; + break; + case BSIM3_MOD_LDSUB: + mod->BSIM3ldsub = value->rValue; + mod->BSIM3ldsubGiven = TRUE; + break; + case BSIM3_MOD_LVTH0: + mod->BSIM3lvth0 = value->rValue; + mod->BSIM3lvth0Given = TRUE; + break; + case BSIM3_MOD_LUA: + mod->BSIM3lua = value->rValue; + mod->BSIM3luaGiven = TRUE; + break; + case BSIM3_MOD_LUA1: + mod->BSIM3lua1 = value->rValue; + mod->BSIM3lua1Given = TRUE; + break; + case BSIM3_MOD_LUB: + mod->BSIM3lub = value->rValue; + mod->BSIM3lubGiven = TRUE; + break; + case BSIM3_MOD_LUB1: + mod->BSIM3lub1 = value->rValue; + mod->BSIM3lub1Given = TRUE; + break; + case BSIM3_MOD_LUC: + mod->BSIM3luc = value->rValue; + mod->BSIM3lucGiven = TRUE; + break; + case BSIM3_MOD_LUC1: + mod->BSIM3luc1 = value->rValue; + mod->BSIM3luc1Given = TRUE; + break; + case BSIM3_MOD_LU0: + mod->BSIM3lu0 = value->rValue; + mod->BSIM3lu0Given = TRUE; + break; + case BSIM3_MOD_LUTE: + mod->BSIM3lute = value->rValue; + mod->BSIM3luteGiven = TRUE; + break; + case BSIM3_MOD_LVOFF: + mod->BSIM3lvoff = value->rValue; + mod->BSIM3lvoffGiven = TRUE; + break; + case BSIM3_MOD_LDELTA: + mod->BSIM3ldelta = value->rValue; + mod->BSIM3ldeltaGiven = TRUE; + break; + case BSIM3_MOD_LRDSW: + mod->BSIM3lrdsw = value->rValue; + mod->BSIM3lrdswGiven = TRUE; + break; + case BSIM3_MOD_LPRWB: + mod->BSIM3lprwb = value->rValue; + mod->BSIM3lprwbGiven = TRUE; + break; + case BSIM3_MOD_LPRWG: + mod->BSIM3lprwg = value->rValue; + mod->BSIM3lprwgGiven = TRUE; + break; + case BSIM3_MOD_LPRT: + mod->BSIM3lprt = value->rValue; + mod->BSIM3lprtGiven = TRUE; + break; + case BSIM3_MOD_LETA0: + mod->BSIM3leta0 = value->rValue; + mod->BSIM3leta0Given = TRUE; + break; + case BSIM3_MOD_LETAB: + mod->BSIM3letab = value->rValue; + mod->BSIM3letabGiven = TRUE; + break; + case BSIM3_MOD_LPCLM: + mod->BSIM3lpclm = value->rValue; + mod->BSIM3lpclmGiven = TRUE; + break; + case BSIM3_MOD_LPDIBL1: + mod->BSIM3lpdibl1 = value->rValue; + mod->BSIM3lpdibl1Given = TRUE; + break; + case BSIM3_MOD_LPDIBL2: + mod->BSIM3lpdibl2 = value->rValue; + mod->BSIM3lpdibl2Given = TRUE; + break; + case BSIM3_MOD_LPDIBLB: + mod->BSIM3lpdiblb = value->rValue; + mod->BSIM3lpdiblbGiven = TRUE; + break; + case BSIM3_MOD_LPSCBE1: + mod->BSIM3lpscbe1 = value->rValue; + mod->BSIM3lpscbe1Given = TRUE; + break; + case BSIM3_MOD_LPSCBE2: + mod->BSIM3lpscbe2 = value->rValue; + mod->BSIM3lpscbe2Given = TRUE; + break; + case BSIM3_MOD_LPVAG: + mod->BSIM3lpvag = value->rValue; + mod->BSIM3lpvagGiven = TRUE; + break; + case BSIM3_MOD_LWR: + mod->BSIM3lwr = value->rValue; + mod->BSIM3lwrGiven = TRUE; + break; + case BSIM3_MOD_LDWG: + mod->BSIM3ldwg = value->rValue; + mod->BSIM3ldwgGiven = TRUE; + break; + case BSIM3_MOD_LDWB: + mod->BSIM3ldwb = value->rValue; + mod->BSIM3ldwbGiven = TRUE; + break; + case BSIM3_MOD_LB0: + mod->BSIM3lb0 = value->rValue; + mod->BSIM3lb0Given = TRUE; + break; + case BSIM3_MOD_LB1: + mod->BSIM3lb1 = value->rValue; + mod->BSIM3lb1Given = TRUE; + break; + case BSIM3_MOD_LALPHA0: + mod->BSIM3lalpha0 = value->rValue; + mod->BSIM3lalpha0Given = TRUE; + break; + case BSIM3_MOD_LALPHA1: + mod->BSIM3lalpha1 = value->rValue; + mod->BSIM3lalpha1Given = TRUE; + break; + case BSIM3_MOD_LBETA0: + mod->BSIM3lbeta0 = value->rValue; + mod->BSIM3lbeta0Given = TRUE; + break; + case BSIM3_MOD_LVFB: + mod->BSIM3lvfb = value->rValue; + mod->BSIM3lvfbGiven = TRUE; + break; - case BSIM3_MOD_WELM : - mod->BSIM3welm = value->rValue; - mod->BSIM3welmGiven = TRUE; - break; - case BSIM3_MOD_WCGSL : - mod->BSIM3wcgsl = value->rValue; - mod->BSIM3wcgslGiven = TRUE; - break; - case BSIM3_MOD_WCGDL : - mod->BSIM3wcgdl = value->rValue; - mod->BSIM3wcgdlGiven = TRUE; - break; - case BSIM3_MOD_WCKAPPA : - mod->BSIM3wckappa = value->rValue; - mod->BSIM3wckappaGiven = TRUE; - break; - case BSIM3_MOD_WCF : - mod->BSIM3wcf = value->rValue; - mod->BSIM3wcfGiven = TRUE; - break; - case BSIM3_MOD_WCLC : - mod->BSIM3wclc = value->rValue; - mod->BSIM3wclcGiven = TRUE; - break; - case BSIM3_MOD_WCLE : - mod->BSIM3wcle = value->rValue; - mod->BSIM3wcleGiven = TRUE; - break; - case BSIM3_MOD_WVFBCV : - mod->BSIM3wvfbcv = value->rValue; - mod->BSIM3wvfbcvGiven = TRUE; - break; - case BSIM3_MOD_WACDE : - mod->BSIM3wacde = value->rValue; - mod->BSIM3wacdeGiven = TRUE; - break; - case BSIM3_MOD_WMOIN : - mod->BSIM3wmoin = value->rValue; - mod->BSIM3wmoinGiven = TRUE; - break; - case BSIM3_MOD_WNOFF : - mod->BSIM3wnoff = value->rValue; - mod->BSIM3wnoffGiven = TRUE; - break; - case BSIM3_MOD_WVOFFCV : - mod->BSIM3wvoffcv = value->rValue; - mod->BSIM3wvoffcvGiven = TRUE; - break; + case BSIM3_MOD_LELM: + mod->BSIM3lelm = value->rValue; + mod->BSIM3lelmGiven = TRUE; + break; + case BSIM3_MOD_LCGSL: + mod->BSIM3lcgsl = value->rValue; + mod->BSIM3lcgslGiven = TRUE; + break; + case BSIM3_MOD_LCGDL: + mod->BSIM3lcgdl = value->rValue; + mod->BSIM3lcgdlGiven = TRUE; + break; + case BSIM3_MOD_LCKAPPA: + mod->BSIM3lckappa = value->rValue; + mod->BSIM3lckappaGiven = TRUE; + break; + case BSIM3_MOD_LCF: + mod->BSIM3lcf = value->rValue; + mod->BSIM3lcfGiven = TRUE; + break; + case BSIM3_MOD_LCLC: + mod->BSIM3lclc = value->rValue; + mod->BSIM3lclcGiven = TRUE; + break; + case BSIM3_MOD_LCLE: + mod->BSIM3lcle = value->rValue; + mod->BSIM3lcleGiven = TRUE; + break; + case BSIM3_MOD_LVFBCV: + mod->BSIM3lvfbcv = value->rValue; + mod->BSIM3lvfbcvGiven = TRUE; + break; + case BSIM3_MOD_LACDE: + mod->BSIM3lacde = value->rValue; + mod->BSIM3lacdeGiven = TRUE; + break; + case BSIM3_MOD_LMOIN: + mod->BSIM3lmoin = value->rValue; + mod->BSIM3lmoinGiven = TRUE; + break; + case BSIM3_MOD_LNOFF: + mod->BSIM3lnoff = value->rValue; + mod->BSIM3lnoffGiven = TRUE; + break; + case BSIM3_MOD_LVOFFCV: + mod->BSIM3lvoffcv = value->rValue; + mod->BSIM3lvoffcvGiven = TRUE; + break; - /* Cross-term dependence */ - case BSIM3_MOD_PCDSC : - mod->BSIM3pcdsc = value->rValue; - mod->BSIM3pcdscGiven = TRUE; - break; + /* Width dependence */ + case BSIM3_MOD_WCDSC: + mod->BSIM3wcdsc = value->rValue; + mod->BSIM3wcdscGiven = TRUE; + break; - case BSIM3_MOD_PCDSCB : - mod->BSIM3pcdscb = value->rValue; - mod->BSIM3pcdscbGiven = TRUE; - break; - case BSIM3_MOD_PCDSCD : - mod->BSIM3pcdscd = value->rValue; - mod->BSIM3pcdscdGiven = TRUE; - break; - case BSIM3_MOD_PCIT : - mod->BSIM3pcit = value->rValue; - mod->BSIM3pcitGiven = TRUE; - break; - case BSIM3_MOD_PNFACTOR : - mod->BSIM3pnfactor = value->rValue; - mod->BSIM3pnfactorGiven = TRUE; - break; - case BSIM3_MOD_PXJ: - mod->BSIM3pxj = value->rValue; - mod->BSIM3pxjGiven = TRUE; - break; - case BSIM3_MOD_PVSAT: - mod->BSIM3pvsat = value->rValue; - mod->BSIM3pvsatGiven = TRUE; - break; + case BSIM3_MOD_WCDSCB: + mod->BSIM3wcdscb = value->rValue; + mod->BSIM3wcdscbGiven = TRUE; + break; + case BSIM3_MOD_WCDSCD: + mod->BSIM3wcdscd = value->rValue; + mod->BSIM3wcdscdGiven = TRUE; + break; + case BSIM3_MOD_WCIT: + mod->BSIM3wcit = value->rValue; + mod->BSIM3wcitGiven = TRUE; + break; + case BSIM3_MOD_WNFACTOR: + mod->BSIM3wnfactor = value->rValue; + mod->BSIM3wnfactorGiven = TRUE; + break; + case BSIM3_MOD_WXJ: + mod->BSIM3wxj = value->rValue; + mod->BSIM3wxjGiven = TRUE; + break; + case BSIM3_MOD_WVSAT: + mod->BSIM3wvsat = value->rValue; + mod->BSIM3wvsatGiven = TRUE; + break; - case BSIM3_MOD_PA0: - mod->BSIM3pa0 = value->rValue; - mod->BSIM3pa0Given = TRUE; - break; - case BSIM3_MOD_PAGS: - mod->BSIM3pags = value->rValue; - mod->BSIM3pagsGiven = TRUE; - break; - case BSIM3_MOD_PA1: - mod->BSIM3pa1 = value->rValue; - mod->BSIM3pa1Given = TRUE; - break; - case BSIM3_MOD_PA2: - mod->BSIM3pa2 = value->rValue; - mod->BSIM3pa2Given = TRUE; - break; - case BSIM3_MOD_PAT: - mod->BSIM3pat = value->rValue; - mod->BSIM3patGiven = TRUE; - break; - case BSIM3_MOD_PKETA: - mod->BSIM3pketa = value->rValue; - mod->BSIM3pketaGiven = TRUE; - break; - case BSIM3_MOD_PNSUB: - mod->BSIM3pnsub = value->rValue; - mod->BSIM3pnsubGiven = TRUE; - break; - case BSIM3_MOD_PNPEAK: - mod->BSIM3pnpeak = value->rValue; - mod->BSIM3pnpeakGiven = TRUE; - if (mod->BSIM3pnpeak > 1.0e20) - mod->BSIM3pnpeak *= 1.0e-6; - break; - case BSIM3_MOD_PNGATE: - mod->BSIM3pngate = value->rValue; - mod->BSIM3pngateGiven = TRUE; - if (mod->BSIM3pngate > 1.0e23) - mod->BSIM3pngate *= 1.0e-6; - break; - case BSIM3_MOD_PGAMMA1: - mod->BSIM3pgamma1 = value->rValue; - mod->BSIM3pgamma1Given = TRUE; - break; - case BSIM3_MOD_PGAMMA2: - mod->BSIM3pgamma2 = value->rValue; - mod->BSIM3pgamma2Given = TRUE; - break; - case BSIM3_MOD_PVBX: - mod->BSIM3pvbx = value->rValue; - mod->BSIM3pvbxGiven = TRUE; - break; - case BSIM3_MOD_PVBM: - mod->BSIM3pvbm = value->rValue; - mod->BSIM3pvbmGiven = TRUE; - break; - case BSIM3_MOD_PXT: - mod->BSIM3pxt = value->rValue; - mod->BSIM3pxtGiven = TRUE; - break; - case BSIM3_MOD_PK1: - mod->BSIM3pk1 = value->rValue; - mod->BSIM3pk1Given = TRUE; - break; - case BSIM3_MOD_PKT1: - mod->BSIM3pkt1 = value->rValue; - mod->BSIM3pkt1Given = TRUE; - break; - case BSIM3_MOD_PKT1L: - mod->BSIM3pkt1l = value->rValue; - mod->BSIM3pkt1lGiven = TRUE; - break; - case BSIM3_MOD_PKT2: - mod->BSIM3pkt2 = value->rValue; - mod->BSIM3pkt2Given = TRUE; - break; - case BSIM3_MOD_PK2: - mod->BSIM3pk2 = value->rValue; - mod->BSIM3pk2Given = TRUE; - break; - case BSIM3_MOD_PK3: - mod->BSIM3pk3 = value->rValue; - mod->BSIM3pk3Given = TRUE; - break; - case BSIM3_MOD_PK3B: - mod->BSIM3pk3b = value->rValue; - mod->BSIM3pk3bGiven = TRUE; - break; - case BSIM3_MOD_PNLX: - mod->BSIM3pnlx = value->rValue; - mod->BSIM3pnlxGiven = TRUE; - break; - case BSIM3_MOD_PW0: - mod->BSIM3pw0 = value->rValue; - mod->BSIM3pw0Given = TRUE; - break; - case BSIM3_MOD_PDVT0: - mod->BSIM3pdvt0 = value->rValue; - mod->BSIM3pdvt0Given = TRUE; - break; - case BSIM3_MOD_PDVT1: - mod->BSIM3pdvt1 = value->rValue; - mod->BSIM3pdvt1Given = TRUE; - break; - case BSIM3_MOD_PDVT2: - mod->BSIM3pdvt2 = value->rValue; - mod->BSIM3pdvt2Given = TRUE; - break; - case BSIM3_MOD_PDVT0W: - mod->BSIM3pdvt0w = value->rValue; - mod->BSIM3pdvt0wGiven = TRUE; - break; - case BSIM3_MOD_PDVT1W: - mod->BSIM3pdvt1w = value->rValue; - mod->BSIM3pdvt1wGiven = TRUE; - break; - case BSIM3_MOD_PDVT2W: - mod->BSIM3pdvt2w = value->rValue; - mod->BSIM3pdvt2wGiven = TRUE; - break; - case BSIM3_MOD_PDROUT: - mod->BSIM3pdrout = value->rValue; - mod->BSIM3pdroutGiven = TRUE; - break; - case BSIM3_MOD_PDSUB: - mod->BSIM3pdsub = value->rValue; - mod->BSIM3pdsubGiven = TRUE; - break; - case BSIM3_MOD_PVTH0: - mod->BSIM3pvth0 = value->rValue; - mod->BSIM3pvth0Given = TRUE; - break; - case BSIM3_MOD_PUA: - mod->BSIM3pua = value->rValue; - mod->BSIM3puaGiven = TRUE; - break; - case BSIM3_MOD_PUA1: - mod->BSIM3pua1 = value->rValue; - mod->BSIM3pua1Given = TRUE; - break; - case BSIM3_MOD_PUB: - mod->BSIM3pub = value->rValue; - mod->BSIM3pubGiven = TRUE; - break; - case BSIM3_MOD_PUB1: - mod->BSIM3pub1 = value->rValue; - mod->BSIM3pub1Given = TRUE; - break; - case BSIM3_MOD_PUC: - mod->BSIM3puc = value->rValue; - mod->BSIM3pucGiven = TRUE; - break; - case BSIM3_MOD_PUC1: - mod->BSIM3puc1 = value->rValue; - mod->BSIM3puc1Given = TRUE; - break; - case BSIM3_MOD_PU0 : - mod->BSIM3pu0 = value->rValue; - mod->BSIM3pu0Given = TRUE; - break; - case BSIM3_MOD_PUTE : - mod->BSIM3pute = value->rValue; - mod->BSIM3puteGiven = TRUE; - break; - case BSIM3_MOD_PVOFF: - mod->BSIM3pvoff = value->rValue; - mod->BSIM3pvoffGiven = TRUE; - break; - case BSIM3_MOD_PDELTA : - mod->BSIM3pdelta = value->rValue; - mod->BSIM3pdeltaGiven = TRUE; - break; - case BSIM3_MOD_PRDSW: - mod->BSIM3prdsw = value->rValue; - mod->BSIM3prdswGiven = TRUE; - break; - case BSIM3_MOD_PPRWB: - mod->BSIM3pprwb = value->rValue; - mod->BSIM3pprwbGiven = TRUE; - break; - case BSIM3_MOD_PPRWG: - mod->BSIM3pprwg = value->rValue; - mod->BSIM3pprwgGiven = TRUE; - break; - case BSIM3_MOD_PPRT: - mod->BSIM3pprt = value->rValue; - mod->BSIM3pprtGiven = TRUE; - break; - case BSIM3_MOD_PETA0: - mod->BSIM3peta0 = value->rValue; - mod->BSIM3peta0Given = TRUE; - break; - case BSIM3_MOD_PETAB: - mod->BSIM3petab = value->rValue; - mod->BSIM3petabGiven = TRUE; - break; - case BSIM3_MOD_PPCLM: - mod->BSIM3ppclm = value->rValue; - mod->BSIM3ppclmGiven = TRUE; - break; - case BSIM3_MOD_PPDIBL1: - mod->BSIM3ppdibl1 = value->rValue; - mod->BSIM3ppdibl1Given = TRUE; - break; - case BSIM3_MOD_PPDIBL2: - mod->BSIM3ppdibl2 = value->rValue; - mod->BSIM3ppdibl2Given = TRUE; - break; - case BSIM3_MOD_PPDIBLB: - mod->BSIM3ppdiblb = value->rValue; - mod->BSIM3ppdiblbGiven = TRUE; - break; - case BSIM3_MOD_PPSCBE1: - mod->BSIM3ppscbe1 = value->rValue; - mod->BSIM3ppscbe1Given = TRUE; - break; - case BSIM3_MOD_PPSCBE2: - mod->BSIM3ppscbe2 = value->rValue; - mod->BSIM3ppscbe2Given = TRUE; - break; - case BSIM3_MOD_PPVAG: - mod->BSIM3ppvag = value->rValue; - mod->BSIM3ppvagGiven = TRUE; - break; - case BSIM3_MOD_PWR : - mod->BSIM3pwr = value->rValue; - mod->BSIM3pwrGiven = TRUE; - break; - case BSIM3_MOD_PDWG : - mod->BSIM3pdwg = value->rValue; - mod->BSIM3pdwgGiven = TRUE; - break; - case BSIM3_MOD_PDWB : - mod->BSIM3pdwb = value->rValue; - mod->BSIM3pdwbGiven = TRUE; - break; - case BSIM3_MOD_PB0 : - mod->BSIM3pb0 = value->rValue; - mod->BSIM3pb0Given = TRUE; - break; - case BSIM3_MOD_PB1 : - mod->BSIM3pb1 = value->rValue; - mod->BSIM3pb1Given = TRUE; - break; - case BSIM3_MOD_PALPHA0 : - mod->BSIM3palpha0 = value->rValue; - mod->BSIM3palpha0Given = TRUE; - break; - case BSIM3_MOD_PALPHA1 : - mod->BSIM3palpha1 = value->rValue; - mod->BSIM3palpha1Given = TRUE; - break; - case BSIM3_MOD_PBETA0 : - mod->BSIM3pbeta0 = value->rValue; - mod->BSIM3pbeta0Given = TRUE; - break; - case BSIM3_MOD_PVFB : - mod->BSIM3pvfb = value->rValue; - mod->BSIM3pvfbGiven = TRUE; - break; + case BSIM3_MOD_WA0: + mod->BSIM3wa0 = value->rValue; + mod->BSIM3wa0Given = TRUE; + break; + case BSIM3_MOD_WAGS: + mod->BSIM3wags = value->rValue; + mod->BSIM3wagsGiven = TRUE; + break; + case BSIM3_MOD_WA1: + mod->BSIM3wa1 = value->rValue; + mod->BSIM3wa1Given = TRUE; + break; + case BSIM3_MOD_WA2: + mod->BSIM3wa2 = value->rValue; + mod->BSIM3wa2Given = TRUE; + break; + case BSIM3_MOD_WAT: + mod->BSIM3wat = value->rValue; + mod->BSIM3watGiven = TRUE; + break; + case BSIM3_MOD_WKETA: + mod->BSIM3wketa = value->rValue; + mod->BSIM3wketaGiven = TRUE; + break; + case BSIM3_MOD_WNSUB: + mod->BSIM3wnsub = value->rValue; + mod->BSIM3wnsubGiven = TRUE; + break; + case BSIM3_MOD_WNPEAK: + mod->BSIM3wnpeak = value->rValue; + mod->BSIM3wnpeakGiven = TRUE; + if (mod->BSIM3wnpeak > 1.0e20) + mod->BSIM3wnpeak *= 1.0e-6; + break; + case BSIM3_MOD_WNGATE: + mod->BSIM3wngate = value->rValue; + mod->BSIM3wngateGiven = TRUE; + if (mod->BSIM3wngate > 1.0e23) + mod->BSIM3wngate *= 1.0e-6; + break; + case BSIM3_MOD_WGAMMA1: + mod->BSIM3wgamma1 = value->rValue; + mod->BSIM3wgamma1Given = TRUE; + break; + case BSIM3_MOD_WGAMMA2: + mod->BSIM3wgamma2 = value->rValue; + mod->BSIM3wgamma2Given = TRUE; + break; + case BSIM3_MOD_WVBX: + mod->BSIM3wvbx = value->rValue; + mod->BSIM3wvbxGiven = TRUE; + break; + case BSIM3_MOD_WVBM: + mod->BSIM3wvbm = value->rValue; + mod->BSIM3wvbmGiven = TRUE; + break; + case BSIM3_MOD_WXT: + mod->BSIM3wxt = value->rValue; + mod->BSIM3wxtGiven = TRUE; + break; + case BSIM3_MOD_WK1: + mod->BSIM3wk1 = value->rValue; + mod->BSIM3wk1Given = TRUE; + break; + case BSIM3_MOD_WKT1: + mod->BSIM3wkt1 = value->rValue; + mod->BSIM3wkt1Given = TRUE; + break; + case BSIM3_MOD_WKT1L: + mod->BSIM3wkt1l = value->rValue; + mod->BSIM3wkt1lGiven = TRUE; + break; + case BSIM3_MOD_WKT2: + mod->BSIM3wkt2 = value->rValue; + mod->BSIM3wkt2Given = TRUE; + break; + case BSIM3_MOD_WK2: + mod->BSIM3wk2 = value->rValue; + mod->BSIM3wk2Given = TRUE; + break; + case BSIM3_MOD_WK3: + mod->BSIM3wk3 = value->rValue; + mod->BSIM3wk3Given = TRUE; + break; + case BSIM3_MOD_WK3B: + mod->BSIM3wk3b = value->rValue; + mod->BSIM3wk3bGiven = TRUE; + break; + case BSIM3_MOD_WNLX: + mod->BSIM3wnlx = value->rValue; + mod->BSIM3wnlxGiven = TRUE; + break; + case BSIM3_MOD_WW0: + mod->BSIM3ww0 = value->rValue; + mod->BSIM3ww0Given = TRUE; + break; + case BSIM3_MOD_WDVT0: + mod->BSIM3wdvt0 = value->rValue; + mod->BSIM3wdvt0Given = TRUE; + break; + case BSIM3_MOD_WDVT1: + mod->BSIM3wdvt1 = value->rValue; + mod->BSIM3wdvt1Given = TRUE; + break; + case BSIM3_MOD_WDVT2: + mod->BSIM3wdvt2 = value->rValue; + mod->BSIM3wdvt2Given = TRUE; + break; + case BSIM3_MOD_WDVT0W: + mod->BSIM3wdvt0w = value->rValue; + mod->BSIM3wdvt0wGiven = TRUE; + break; + case BSIM3_MOD_WDVT1W: + mod->BSIM3wdvt1w = value->rValue; + mod->BSIM3wdvt1wGiven = TRUE; + break; + case BSIM3_MOD_WDVT2W: + mod->BSIM3wdvt2w = value->rValue; + mod->BSIM3wdvt2wGiven = TRUE; + break; + case BSIM3_MOD_WDROUT: + mod->BSIM3wdrout = value->rValue; + mod->BSIM3wdroutGiven = TRUE; + break; + case BSIM3_MOD_WDSUB: + mod->BSIM3wdsub = value->rValue; + mod->BSIM3wdsubGiven = TRUE; + break; + case BSIM3_MOD_WVTH0: + mod->BSIM3wvth0 = value->rValue; + mod->BSIM3wvth0Given = TRUE; + break; + case BSIM3_MOD_WUA: + mod->BSIM3wua = value->rValue; + mod->BSIM3wuaGiven = TRUE; + break; + case BSIM3_MOD_WUA1: + mod->BSIM3wua1 = value->rValue; + mod->BSIM3wua1Given = TRUE; + break; + case BSIM3_MOD_WUB: + mod->BSIM3wub = value->rValue; + mod->BSIM3wubGiven = TRUE; + break; + case BSIM3_MOD_WUB1: + mod->BSIM3wub1 = value->rValue; + mod->BSIM3wub1Given = TRUE; + break; + case BSIM3_MOD_WUC: + mod->BSIM3wuc = value->rValue; + mod->BSIM3wucGiven = TRUE; + break; + case BSIM3_MOD_WUC1: + mod->BSIM3wuc1 = value->rValue; + mod->BSIM3wuc1Given = TRUE; + break; + case BSIM3_MOD_WU0: + mod->BSIM3wu0 = value->rValue; + mod->BSIM3wu0Given = TRUE; + break; + case BSIM3_MOD_WUTE: + mod->BSIM3wute = value->rValue; + mod->BSIM3wuteGiven = TRUE; + break; + case BSIM3_MOD_WVOFF: + mod->BSIM3wvoff = value->rValue; + mod->BSIM3wvoffGiven = TRUE; + break; + case BSIM3_MOD_WDELTA: + mod->BSIM3wdelta = value->rValue; + mod->BSIM3wdeltaGiven = TRUE; + break; + case BSIM3_MOD_WRDSW: + mod->BSIM3wrdsw = value->rValue; + mod->BSIM3wrdswGiven = TRUE; + break; + case BSIM3_MOD_WPRWB: + mod->BSIM3wprwb = value->rValue; + mod->BSIM3wprwbGiven = TRUE; + break; + case BSIM3_MOD_WPRWG: + mod->BSIM3wprwg = value->rValue; + mod->BSIM3wprwgGiven = TRUE; + break; + case BSIM3_MOD_WPRT: + mod->BSIM3wprt = value->rValue; + mod->BSIM3wprtGiven = TRUE; + break; + case BSIM3_MOD_WETA0: + mod->BSIM3weta0 = value->rValue; + mod->BSIM3weta0Given = TRUE; + break; + case BSIM3_MOD_WETAB: + mod->BSIM3wetab = value->rValue; + mod->BSIM3wetabGiven = TRUE; + break; + case BSIM3_MOD_WPCLM: + mod->BSIM3wpclm = value->rValue; + mod->BSIM3wpclmGiven = TRUE; + break; + case BSIM3_MOD_WPDIBL1: + mod->BSIM3wpdibl1 = value->rValue; + mod->BSIM3wpdibl1Given = TRUE; + break; + case BSIM3_MOD_WPDIBL2: + mod->BSIM3wpdibl2 = value->rValue; + mod->BSIM3wpdibl2Given = TRUE; + break; + case BSIM3_MOD_WPDIBLB: + mod->BSIM3wpdiblb = value->rValue; + mod->BSIM3wpdiblbGiven = TRUE; + break; + case BSIM3_MOD_WPSCBE1: + mod->BSIM3wpscbe1 = value->rValue; + mod->BSIM3wpscbe1Given = TRUE; + break; + case BSIM3_MOD_WPSCBE2: + mod->BSIM3wpscbe2 = value->rValue; + mod->BSIM3wpscbe2Given = TRUE; + break; + case BSIM3_MOD_WPVAG: + mod->BSIM3wpvag = value->rValue; + mod->BSIM3wpvagGiven = TRUE; + break; + case BSIM3_MOD_WWR: + mod->BSIM3wwr = value->rValue; + mod->BSIM3wwrGiven = TRUE; + break; + case BSIM3_MOD_WDWG: + mod->BSIM3wdwg = value->rValue; + mod->BSIM3wdwgGiven = TRUE; + break; + case BSIM3_MOD_WDWB: + mod->BSIM3wdwb = value->rValue; + mod->BSIM3wdwbGiven = TRUE; + break; + case BSIM3_MOD_WB0: + mod->BSIM3wb0 = value->rValue; + mod->BSIM3wb0Given = TRUE; + break; + case BSIM3_MOD_WB1: + mod->BSIM3wb1 = value->rValue; + mod->BSIM3wb1Given = TRUE; + break; + case BSIM3_MOD_WALPHA0: + mod->BSIM3walpha0 = value->rValue; + mod->BSIM3walpha0Given = TRUE; + break; + case BSIM3_MOD_WALPHA1: + mod->BSIM3walpha1 = value->rValue; + mod->BSIM3walpha1Given = TRUE; + break; + case BSIM3_MOD_WBETA0: + mod->BSIM3wbeta0 = value->rValue; + mod->BSIM3wbeta0Given = TRUE; + break; + case BSIM3_MOD_WVFB: + mod->BSIM3wvfb = value->rValue; + mod->BSIM3wvfbGiven = TRUE; + break; - case BSIM3_MOD_PELM : - mod->BSIM3pelm = value->rValue; - mod->BSIM3pelmGiven = TRUE; - break; - case BSIM3_MOD_PCGSL : - mod->BSIM3pcgsl = value->rValue; - mod->BSIM3pcgslGiven = TRUE; - break; - case BSIM3_MOD_PCGDL : - mod->BSIM3pcgdl = value->rValue; - mod->BSIM3pcgdlGiven = TRUE; - break; - case BSIM3_MOD_PCKAPPA : - mod->BSIM3pckappa = value->rValue; - mod->BSIM3pckappaGiven = TRUE; - break; - case BSIM3_MOD_PCF : - mod->BSIM3pcf = value->rValue; - mod->BSIM3pcfGiven = TRUE; - break; - case BSIM3_MOD_PCLC : - mod->BSIM3pclc = value->rValue; - mod->BSIM3pclcGiven = TRUE; - break; - case BSIM3_MOD_PCLE : - mod->BSIM3pcle = value->rValue; - mod->BSIM3pcleGiven = TRUE; - break; - case BSIM3_MOD_PVFBCV : - mod->BSIM3pvfbcv = value->rValue; - mod->BSIM3pvfbcvGiven = TRUE; - break; - case BSIM3_MOD_PACDE : - mod->BSIM3pacde = value->rValue; - mod->BSIM3pacdeGiven = TRUE; - break; - case BSIM3_MOD_PMOIN : - mod->BSIM3pmoin = value->rValue; - mod->BSIM3pmoinGiven = TRUE; - break; - case BSIM3_MOD_PNOFF : - mod->BSIM3pnoff = value->rValue; - mod->BSIM3pnoffGiven = TRUE; - break; - case BSIM3_MOD_PVOFFCV : - mod->BSIM3pvoffcv = value->rValue; - mod->BSIM3pvoffcvGiven = TRUE; - break; + case BSIM3_MOD_WELM: + mod->BSIM3welm = value->rValue; + mod->BSIM3welmGiven = TRUE; + break; + case BSIM3_MOD_WCGSL: + mod->BSIM3wcgsl = value->rValue; + mod->BSIM3wcgslGiven = TRUE; + break; + case BSIM3_MOD_WCGDL: + mod->BSIM3wcgdl = value->rValue; + mod->BSIM3wcgdlGiven = TRUE; + break; + case BSIM3_MOD_WCKAPPA: + mod->BSIM3wckappa = value->rValue; + mod->BSIM3wckappaGiven = TRUE; + break; + case BSIM3_MOD_WCF: + mod->BSIM3wcf = value->rValue; + mod->BSIM3wcfGiven = TRUE; + break; + case BSIM3_MOD_WCLC: + mod->BSIM3wclc = value->rValue; + mod->BSIM3wclcGiven = TRUE; + break; + case BSIM3_MOD_WCLE: + mod->BSIM3wcle = value->rValue; + mod->BSIM3wcleGiven = TRUE; + break; + case BSIM3_MOD_WVFBCV: + mod->BSIM3wvfbcv = value->rValue; + mod->BSIM3wvfbcvGiven = TRUE; + break; + case BSIM3_MOD_WACDE: + mod->BSIM3wacde = value->rValue; + mod->BSIM3wacdeGiven = TRUE; + break; + case BSIM3_MOD_WMOIN: + mod->BSIM3wmoin = value->rValue; + mod->BSIM3wmoinGiven = TRUE; + break; + case BSIM3_MOD_WNOFF: + mod->BSIM3wnoff = value->rValue; + mod->BSIM3wnoffGiven = TRUE; + break; + case BSIM3_MOD_WVOFFCV: + mod->BSIM3wvoffcv = value->rValue; + mod->BSIM3wvoffcvGiven = TRUE; + break; - case BSIM3_MOD_TNOM : - mod->BSIM3tnom = value->rValue; - mod->BSIM3tnomGiven = TRUE; - break; - case BSIM3_MOD_CGSO : - mod->BSIM3cgso = value->rValue; - mod->BSIM3cgsoGiven = TRUE; - break; - case BSIM3_MOD_CGDO : - mod->BSIM3cgdo = value->rValue; - mod->BSIM3cgdoGiven = TRUE; - break; - case BSIM3_MOD_CGBO : - mod->BSIM3cgbo = value->rValue; - mod->BSIM3cgboGiven = TRUE; - break; - case BSIM3_MOD_XPART : - mod->BSIM3xpart = value->rValue; - mod->BSIM3xpartGiven = TRUE; - break; - case BSIM3_MOD_RSH : - mod->BSIM3sheetResistance = value->rValue; - mod->BSIM3sheetResistanceGiven = TRUE; - break; - case BSIM3_MOD_JS : - mod->BSIM3jctSatCurDensity = value->rValue; - mod->BSIM3jctSatCurDensityGiven = TRUE; - break; - case BSIM3_MOD_JSW : - mod->BSIM3jctSidewallSatCurDensity = value->rValue; - mod->BSIM3jctSidewallSatCurDensityGiven = TRUE; - break; - case BSIM3_MOD_PB : - mod->BSIM3bulkJctPotential = value->rValue; - mod->BSIM3bulkJctPotentialGiven = TRUE; - break; - case BSIM3_MOD_MJ : - mod->BSIM3bulkJctBotGradingCoeff = value->rValue; - mod->BSIM3bulkJctBotGradingCoeffGiven = TRUE; - break; - case BSIM3_MOD_PBSW : - mod->BSIM3sidewallJctPotential = value->rValue; - mod->BSIM3sidewallJctPotentialGiven = TRUE; - break; - case BSIM3_MOD_MJSW : - mod->BSIM3bulkJctSideGradingCoeff = value->rValue; - mod->BSIM3bulkJctSideGradingCoeffGiven = TRUE; - break; - case BSIM3_MOD_CJ : - mod->BSIM3unitAreaJctCap = value->rValue; - mod->BSIM3unitAreaJctCapGiven = TRUE; - break; - case BSIM3_MOD_CJSW : - mod->BSIM3unitLengthSidewallJctCap = value->rValue; - mod->BSIM3unitLengthSidewallJctCapGiven = TRUE; - break; - case BSIM3_MOD_NJ : - mod->BSIM3jctEmissionCoeff = value->rValue; - mod->BSIM3jctEmissionCoeffGiven = TRUE; - break; - case BSIM3_MOD_PBSWG : - mod->BSIM3GatesidewallJctPotential = value->rValue; - mod->BSIM3GatesidewallJctPotentialGiven = TRUE; - break; - case BSIM3_MOD_MJSWG : - mod->BSIM3bulkJctGateSideGradingCoeff = value->rValue; - mod->BSIM3bulkJctGateSideGradingCoeffGiven = TRUE; - break; - case BSIM3_MOD_CJSWG : - mod->BSIM3unitLengthGateSidewallJctCap = value->rValue; - mod->BSIM3unitLengthGateSidewallJctCapGiven = TRUE; - break; - case BSIM3_MOD_XTI : - mod->BSIM3jctTempExponent = value->rValue; - mod->BSIM3jctTempExponentGiven = TRUE; - break; - case BSIM3_MOD_LINT : - mod->BSIM3Lint = value->rValue; - mod->BSIM3LintGiven = TRUE; - break; - case BSIM3_MOD_LL : - mod->BSIM3Ll = value->rValue; - mod->BSIM3LlGiven = TRUE; - break; - case BSIM3_MOD_LLC : - mod->BSIM3Llc = value->rValue; - mod->BSIM3LlcGiven = TRUE; - break; - case BSIM3_MOD_LLN : - mod->BSIM3Lln = value->rValue; - mod->BSIM3LlnGiven = TRUE; - break; - case BSIM3_MOD_LW : - mod->BSIM3Lw = value->rValue; - mod->BSIM3LwGiven = TRUE; - break; - case BSIM3_MOD_LWC : - mod->BSIM3Lwc = value->rValue; - mod->BSIM3LwcGiven = TRUE; - break; - case BSIM3_MOD_LWN : - mod->BSIM3Lwn = value->rValue; - mod->BSIM3LwnGiven = TRUE; - break; - case BSIM3_MOD_LWL : - mod->BSIM3Lwl = value->rValue; - mod->BSIM3LwlGiven = TRUE; - break; - case BSIM3_MOD_LWLC : - mod->BSIM3Lwlc = value->rValue; - mod->BSIM3LwlcGiven = TRUE; - break; - case BSIM3_MOD_LMIN : - mod->BSIM3Lmin = value->rValue; - mod->BSIM3LminGiven = TRUE; - break; - case BSIM3_MOD_LMAX : - mod->BSIM3Lmax = value->rValue; - mod->BSIM3LmaxGiven = TRUE; - break; - case BSIM3_MOD_WINT : - mod->BSIM3Wint = value->rValue; - mod->BSIM3WintGiven = TRUE; - break; - case BSIM3_MOD_WL : - mod->BSIM3Wl = value->rValue; - mod->BSIM3WlGiven = TRUE; - break; - case BSIM3_MOD_WLC : - mod->BSIM3Wlc = value->rValue; - mod->BSIM3WlcGiven = TRUE; - break; - case BSIM3_MOD_WLN : - mod->BSIM3Wln = value->rValue; - mod->BSIM3WlnGiven = TRUE; - break; - case BSIM3_MOD_WW : - mod->BSIM3Ww = value->rValue; - mod->BSIM3WwGiven = TRUE; - break; - case BSIM3_MOD_WWC : - mod->BSIM3Wwc = value->rValue; - mod->BSIM3WwcGiven = TRUE; - break; - case BSIM3_MOD_WWN : - mod->BSIM3Wwn = value->rValue; - mod->BSIM3WwnGiven = TRUE; - break; - case BSIM3_MOD_WWL : - mod->BSIM3Wwl = value->rValue; - mod->BSIM3WwlGiven = TRUE; - break; - case BSIM3_MOD_WWLC : - mod->BSIM3Wwlc = value->rValue; - mod->BSIM3WwlcGiven = TRUE; - break; - case BSIM3_MOD_WMIN : - mod->BSIM3Wmin = value->rValue; - mod->BSIM3WminGiven = TRUE; - break; - case BSIM3_MOD_WMAX : - mod->BSIM3Wmax = value->rValue; - mod->BSIM3WmaxGiven = TRUE; - break; + /* Cross-term dependence */ + case BSIM3_MOD_PCDSC: + mod->BSIM3pcdsc = value->rValue; + mod->BSIM3pcdscGiven = TRUE; + break; - case BSIM3_MOD_NOIA : - mod->BSIM3oxideTrapDensityA = value->rValue; - mod->BSIM3oxideTrapDensityAGiven = TRUE; - break; - case BSIM3_MOD_NOIB : - mod->BSIM3oxideTrapDensityB = value->rValue; - mod->BSIM3oxideTrapDensityBGiven = TRUE; - break; - case BSIM3_MOD_NOIC : - mod->BSIM3oxideTrapDensityC = value->rValue; - mod->BSIM3oxideTrapDensityCGiven = TRUE; - break; - case BSIM3_MOD_EM : - mod->BSIM3em = value->rValue; - mod->BSIM3emGiven = TRUE; - break; - case BSIM3_MOD_EF : - mod->BSIM3ef = value->rValue; - mod->BSIM3efGiven = TRUE; - break; - case BSIM3_MOD_AF : - mod->BSIM3af = value->rValue; - mod->BSIM3afGiven = TRUE; - break; - case BSIM3_MOD_KF : - mod->BSIM3kf = value->rValue; - mod->BSIM3kfGiven = TRUE; - break; - case BSIM3_MOD_NMOS : - if(value->iValue) { - mod->BSIM3type = 1; - mod->BSIM3typeGiven = TRUE; - } - break; - case BSIM3_MOD_PMOS : - if(value->iValue) { - mod->BSIM3type = - 1; - mod->BSIM3typeGiven = TRUE; - } - break; - default: - return(E_BADPARM); + + case BSIM3_MOD_PCDSCB: + mod->BSIM3pcdscb = value->rValue; + mod->BSIM3pcdscbGiven = TRUE; + break; + case BSIM3_MOD_PCDSCD: + mod->BSIM3pcdscd = value->rValue; + mod->BSIM3pcdscdGiven = TRUE; + break; + case BSIM3_MOD_PCIT: + mod->BSIM3pcit = value->rValue; + mod->BSIM3pcitGiven = TRUE; + break; + case BSIM3_MOD_PNFACTOR: + mod->BSIM3pnfactor = value->rValue; + mod->BSIM3pnfactorGiven = TRUE; + break; + case BSIM3_MOD_PXJ: + mod->BSIM3pxj = value->rValue; + mod->BSIM3pxjGiven = TRUE; + break; + case BSIM3_MOD_PVSAT: + mod->BSIM3pvsat = value->rValue; + mod->BSIM3pvsatGiven = TRUE; + break; + + + case BSIM3_MOD_PA0: + mod->BSIM3pa0 = value->rValue; + mod->BSIM3pa0Given = TRUE; + break; + case BSIM3_MOD_PAGS: + mod->BSIM3pags = value->rValue; + mod->BSIM3pagsGiven = TRUE; + break; + case BSIM3_MOD_PA1: + mod->BSIM3pa1 = value->rValue; + mod->BSIM3pa1Given = TRUE; + break; + case BSIM3_MOD_PA2: + mod->BSIM3pa2 = value->rValue; + mod->BSIM3pa2Given = TRUE; + break; + case BSIM3_MOD_PAT: + mod->BSIM3pat = value->rValue; + mod->BSIM3patGiven = TRUE; + break; + case BSIM3_MOD_PKETA: + mod->BSIM3pketa = value->rValue; + mod->BSIM3pketaGiven = TRUE; + break; + case BSIM3_MOD_PNSUB: + mod->BSIM3pnsub = value->rValue; + mod->BSIM3pnsubGiven = TRUE; + break; + case BSIM3_MOD_PNPEAK: + mod->BSIM3pnpeak = value->rValue; + mod->BSIM3pnpeakGiven = TRUE; + if (mod->BSIM3pnpeak > 1.0e20) + mod->BSIM3pnpeak *= 1.0e-6; + break; + case BSIM3_MOD_PNGATE: + mod->BSIM3pngate = value->rValue; + mod->BSIM3pngateGiven = TRUE; + if (mod->BSIM3pngate > 1.0e23) + mod->BSIM3pngate *= 1.0e-6; + break; + case BSIM3_MOD_PGAMMA1: + mod->BSIM3pgamma1 = value->rValue; + mod->BSIM3pgamma1Given = TRUE; + break; + case BSIM3_MOD_PGAMMA2: + mod->BSIM3pgamma2 = value->rValue; + mod->BSIM3pgamma2Given = TRUE; + break; + case BSIM3_MOD_PVBX: + mod->BSIM3pvbx = value->rValue; + mod->BSIM3pvbxGiven = TRUE; + break; + case BSIM3_MOD_PVBM: + mod->BSIM3pvbm = value->rValue; + mod->BSIM3pvbmGiven = TRUE; + break; + case BSIM3_MOD_PXT: + mod->BSIM3pxt = value->rValue; + mod->BSIM3pxtGiven = TRUE; + break; + case BSIM3_MOD_PK1: + mod->BSIM3pk1 = value->rValue; + mod->BSIM3pk1Given = TRUE; + break; + case BSIM3_MOD_PKT1: + mod->BSIM3pkt1 = value->rValue; + mod->BSIM3pkt1Given = TRUE; + break; + case BSIM3_MOD_PKT1L: + mod->BSIM3pkt1l = value->rValue; + mod->BSIM3pkt1lGiven = TRUE; + break; + case BSIM3_MOD_PKT2: + mod->BSIM3pkt2 = value->rValue; + mod->BSIM3pkt2Given = TRUE; + break; + case BSIM3_MOD_PK2: + mod->BSIM3pk2 = value->rValue; + mod->BSIM3pk2Given = TRUE; + break; + case BSIM3_MOD_PK3: + mod->BSIM3pk3 = value->rValue; + mod->BSIM3pk3Given = TRUE; + break; + case BSIM3_MOD_PK3B: + mod->BSIM3pk3b = value->rValue; + mod->BSIM3pk3bGiven = TRUE; + break; + case BSIM3_MOD_PNLX: + mod->BSIM3pnlx = value->rValue; + mod->BSIM3pnlxGiven = TRUE; + break; + case BSIM3_MOD_PW0: + mod->BSIM3pw0 = value->rValue; + mod->BSIM3pw0Given = TRUE; + break; + case BSIM3_MOD_PDVT0: + mod->BSIM3pdvt0 = value->rValue; + mod->BSIM3pdvt0Given = TRUE; + break; + case BSIM3_MOD_PDVT1: + mod->BSIM3pdvt1 = value->rValue; + mod->BSIM3pdvt1Given = TRUE; + break; + case BSIM3_MOD_PDVT2: + mod->BSIM3pdvt2 = value->rValue; + mod->BSIM3pdvt2Given = TRUE; + break; + case BSIM3_MOD_PDVT0W: + mod->BSIM3pdvt0w = value->rValue; + mod->BSIM3pdvt0wGiven = TRUE; + break; + case BSIM3_MOD_PDVT1W: + mod->BSIM3pdvt1w = value->rValue; + mod->BSIM3pdvt1wGiven = TRUE; + break; + case BSIM3_MOD_PDVT2W: + mod->BSIM3pdvt2w = value->rValue; + mod->BSIM3pdvt2wGiven = TRUE; + break; + case BSIM3_MOD_PDROUT: + mod->BSIM3pdrout = value->rValue; + mod->BSIM3pdroutGiven = TRUE; + break; + case BSIM3_MOD_PDSUB: + mod->BSIM3pdsub = value->rValue; + mod->BSIM3pdsubGiven = TRUE; + break; + case BSIM3_MOD_PVTH0: + mod->BSIM3pvth0 = value->rValue; + mod->BSIM3pvth0Given = TRUE; + break; + case BSIM3_MOD_PUA: + mod->BSIM3pua = value->rValue; + mod->BSIM3puaGiven = TRUE; + break; + case BSIM3_MOD_PUA1: + mod->BSIM3pua1 = value->rValue; + mod->BSIM3pua1Given = TRUE; + break; + case BSIM3_MOD_PUB: + mod->BSIM3pub = value->rValue; + mod->BSIM3pubGiven = TRUE; + break; + case BSIM3_MOD_PUB1: + mod->BSIM3pub1 = value->rValue; + mod->BSIM3pub1Given = TRUE; + break; + case BSIM3_MOD_PUC: + mod->BSIM3puc = value->rValue; + mod->BSIM3pucGiven = TRUE; + break; + case BSIM3_MOD_PUC1: + mod->BSIM3puc1 = value->rValue; + mod->BSIM3puc1Given = TRUE; + break; + case BSIM3_MOD_PU0: + mod->BSIM3pu0 = value->rValue; + mod->BSIM3pu0Given = TRUE; + break; + case BSIM3_MOD_PUTE: + mod->BSIM3pute = value->rValue; + mod->BSIM3puteGiven = TRUE; + break; + case BSIM3_MOD_PVOFF: + mod->BSIM3pvoff = value->rValue; + mod->BSIM3pvoffGiven = TRUE; + break; + case BSIM3_MOD_PDELTA: + mod->BSIM3pdelta = value->rValue; + mod->BSIM3pdeltaGiven = TRUE; + break; + case BSIM3_MOD_PRDSW: + mod->BSIM3prdsw = value->rValue; + mod->BSIM3prdswGiven = TRUE; + break; + case BSIM3_MOD_PPRWB: + mod->BSIM3pprwb = value->rValue; + mod->BSIM3pprwbGiven = TRUE; + break; + case BSIM3_MOD_PPRWG: + mod->BSIM3pprwg = value->rValue; + mod->BSIM3pprwgGiven = TRUE; + break; + case BSIM3_MOD_PPRT: + mod->BSIM3pprt = value->rValue; + mod->BSIM3pprtGiven = TRUE; + break; + case BSIM3_MOD_PETA0: + mod->BSIM3peta0 = value->rValue; + mod->BSIM3peta0Given = TRUE; + break; + case BSIM3_MOD_PETAB: + mod->BSIM3petab = value->rValue; + mod->BSIM3petabGiven = TRUE; + break; + case BSIM3_MOD_PPCLM: + mod->BSIM3ppclm = value->rValue; + mod->BSIM3ppclmGiven = TRUE; + break; + case BSIM3_MOD_PPDIBL1: + mod->BSIM3ppdibl1 = value->rValue; + mod->BSIM3ppdibl1Given = TRUE; + break; + case BSIM3_MOD_PPDIBL2: + mod->BSIM3ppdibl2 = value->rValue; + mod->BSIM3ppdibl2Given = TRUE; + break; + case BSIM3_MOD_PPDIBLB: + mod->BSIM3ppdiblb = value->rValue; + mod->BSIM3ppdiblbGiven = TRUE; + break; + case BSIM3_MOD_PPSCBE1: + mod->BSIM3ppscbe1 = value->rValue; + mod->BSIM3ppscbe1Given = TRUE; + break; + case BSIM3_MOD_PPSCBE2: + mod->BSIM3ppscbe2 = value->rValue; + mod->BSIM3ppscbe2Given = TRUE; + break; + case BSIM3_MOD_PPVAG: + mod->BSIM3ppvag = value->rValue; + mod->BSIM3ppvagGiven = TRUE; + break; + case BSIM3_MOD_PWR: + mod->BSIM3pwr = value->rValue; + mod->BSIM3pwrGiven = TRUE; + break; + case BSIM3_MOD_PDWG: + mod->BSIM3pdwg = value->rValue; + mod->BSIM3pdwgGiven = TRUE; + break; + case BSIM3_MOD_PDWB: + mod->BSIM3pdwb = value->rValue; + mod->BSIM3pdwbGiven = TRUE; + break; + case BSIM3_MOD_PB0: + mod->BSIM3pb0 = value->rValue; + mod->BSIM3pb0Given = TRUE; + break; + case BSIM3_MOD_PB1: + mod->BSIM3pb1 = value->rValue; + mod->BSIM3pb1Given = TRUE; + break; + case BSIM3_MOD_PALPHA0: + mod->BSIM3palpha0 = value->rValue; + mod->BSIM3palpha0Given = TRUE; + break; + case BSIM3_MOD_PALPHA1: + mod->BSIM3palpha1 = value->rValue; + mod->BSIM3palpha1Given = TRUE; + break; + case BSIM3_MOD_PBETA0: + mod->BSIM3pbeta0 = value->rValue; + mod->BSIM3pbeta0Given = TRUE; + break; + case BSIM3_MOD_PVFB: + mod->BSIM3pvfb = value->rValue; + mod->BSIM3pvfbGiven = TRUE; + break; + + case BSIM3_MOD_PELM: + mod->BSIM3pelm = value->rValue; + mod->BSIM3pelmGiven = TRUE; + break; + case BSIM3_MOD_PCGSL: + mod->BSIM3pcgsl = value->rValue; + mod->BSIM3pcgslGiven = TRUE; + break; + case BSIM3_MOD_PCGDL: + mod->BSIM3pcgdl = value->rValue; + mod->BSIM3pcgdlGiven = TRUE; + break; + case BSIM3_MOD_PCKAPPA: + mod->BSIM3pckappa = value->rValue; + mod->BSIM3pckappaGiven = TRUE; + break; + case BSIM3_MOD_PCF: + mod->BSIM3pcf = value->rValue; + mod->BSIM3pcfGiven = TRUE; + break; + case BSIM3_MOD_PCLC: + mod->BSIM3pclc = value->rValue; + mod->BSIM3pclcGiven = TRUE; + break; + case BSIM3_MOD_PCLE: + mod->BSIM3pcle = value->rValue; + mod->BSIM3pcleGiven = TRUE; + break; + case BSIM3_MOD_PVFBCV: + mod->BSIM3pvfbcv = value->rValue; + mod->BSIM3pvfbcvGiven = TRUE; + break; + case BSIM3_MOD_PACDE: + mod->BSIM3pacde = value->rValue; + mod->BSIM3pacdeGiven = TRUE; + break; + case BSIM3_MOD_PMOIN: + mod->BSIM3pmoin = value->rValue; + mod->BSIM3pmoinGiven = TRUE; + break; + case BSIM3_MOD_PNOFF: + mod->BSIM3pnoff = value->rValue; + mod->BSIM3pnoffGiven = TRUE; + break; + case BSIM3_MOD_PVOFFCV: + mod->BSIM3pvoffcv = value->rValue; + mod->BSIM3pvoffcvGiven = TRUE; + break; + + case BSIM3_MOD_TNOM: + mod->BSIM3tnom = value->rValue + 273.15; + mod->BSIM3tnomGiven = TRUE; + break; + case BSIM3_MOD_CGSO: + mod->BSIM3cgso = value->rValue; + mod->BSIM3cgsoGiven = TRUE; + break; + case BSIM3_MOD_CGDO: + mod->BSIM3cgdo = value->rValue; + mod->BSIM3cgdoGiven = TRUE; + break; + case BSIM3_MOD_CGBO: + mod->BSIM3cgbo = value->rValue; + mod->BSIM3cgboGiven = TRUE; + break; + case BSIM3_MOD_XPART: + mod->BSIM3xpart = value->rValue; + mod->BSIM3xpartGiven = TRUE; + break; + case BSIM3_MOD_RSH: + mod->BSIM3sheetResistance = value->rValue; + mod->BSIM3sheetResistanceGiven = TRUE; + break; + case BSIM3_MOD_JS: + mod->BSIM3jctSatCurDensity = value->rValue; + mod->BSIM3jctSatCurDensityGiven = TRUE; + break; + case BSIM3_MOD_JSW: + mod->BSIM3jctSidewallSatCurDensity = value->rValue; + mod->BSIM3jctSidewallSatCurDensityGiven = TRUE; + break; + case BSIM3_MOD_PB: + mod->BSIM3bulkJctPotential = value->rValue; + mod->BSIM3bulkJctPotentialGiven = TRUE; + break; + case BSIM3_MOD_MJ: + mod->BSIM3bulkJctBotGradingCoeff = value->rValue; + mod->BSIM3bulkJctBotGradingCoeffGiven = TRUE; + break; + case BSIM3_MOD_PBSW: + mod->BSIM3sidewallJctPotential = value->rValue; + mod->BSIM3sidewallJctPotentialGiven = TRUE; + break; + case BSIM3_MOD_MJSW: + mod->BSIM3bulkJctSideGradingCoeff = value->rValue; + mod->BSIM3bulkJctSideGradingCoeffGiven = TRUE; + break; + case BSIM3_MOD_CJ: + mod->BSIM3unitAreaJctCap = value->rValue; + mod->BSIM3unitAreaJctCapGiven = TRUE; + break; + case BSIM3_MOD_CJSW: + mod->BSIM3unitLengthSidewallJctCap = value->rValue; + mod->BSIM3unitLengthSidewallJctCapGiven = TRUE; + break; + case BSIM3_MOD_NJ: + mod->BSIM3jctEmissionCoeff = value->rValue; + mod->BSIM3jctEmissionCoeffGiven = TRUE; + break; + case BSIM3_MOD_PBSWG: + mod->BSIM3GatesidewallJctPotential = value->rValue; + mod->BSIM3GatesidewallJctPotentialGiven = TRUE; + break; + case BSIM3_MOD_MJSWG: + mod->BSIM3bulkJctGateSideGradingCoeff = value->rValue; + mod->BSIM3bulkJctGateSideGradingCoeffGiven = TRUE; + break; + case BSIM3_MOD_CJSWG: + mod->BSIM3unitLengthGateSidewallJctCap = value->rValue; + mod->BSIM3unitLengthGateSidewallJctCapGiven = TRUE; + break; + case BSIM3_MOD_XTI: + mod->BSIM3jctTempExponent = value->rValue; + mod->BSIM3jctTempExponentGiven = TRUE; + break; + case BSIM3_MOD_LINT: + mod->BSIM3Lint = value->rValue; + mod->BSIM3LintGiven = TRUE; + break; + case BSIM3_MOD_LL: + mod->BSIM3Ll = value->rValue; + mod->BSIM3LlGiven = TRUE; + break; + case BSIM3_MOD_LLC: + mod->BSIM3Llc = value->rValue; + mod->BSIM3LlcGiven = TRUE; + break; + case BSIM3_MOD_LLN: + mod->BSIM3Lln = value->rValue; + mod->BSIM3LlnGiven = TRUE; + break; + case BSIM3_MOD_LW: + mod->BSIM3Lw = value->rValue; + mod->BSIM3LwGiven = TRUE; + break; + case BSIM3_MOD_LWC: + mod->BSIM3Lwc = value->rValue; + mod->BSIM3LwcGiven = TRUE; + break; + case BSIM3_MOD_LWN: + mod->BSIM3Lwn = value->rValue; + mod->BSIM3LwnGiven = TRUE; + break; + case BSIM3_MOD_LWL: + mod->BSIM3Lwl = value->rValue; + mod->BSIM3LwlGiven = TRUE; + break; + case BSIM3_MOD_LWLC: + mod->BSIM3Lwlc = value->rValue; + mod->BSIM3LwlcGiven = TRUE; + break; + case BSIM3_MOD_LMIN: + mod->BSIM3Lmin = value->rValue; + mod->BSIM3LminGiven = TRUE; + break; + case BSIM3_MOD_LMAX: + mod->BSIM3Lmax = value->rValue; + mod->BSIM3LmaxGiven = TRUE; + break; + case BSIM3_MOD_WINT: + mod->BSIM3Wint = value->rValue; + mod->BSIM3WintGiven = TRUE; + break; + case BSIM3_MOD_WL: + mod->BSIM3Wl = value->rValue; + mod->BSIM3WlGiven = TRUE; + break; + case BSIM3_MOD_WLC: + mod->BSIM3Wlc = value->rValue; + mod->BSIM3WlcGiven = TRUE; + break; + case BSIM3_MOD_WLN: + mod->BSIM3Wln = value->rValue; + mod->BSIM3WlnGiven = TRUE; + break; + case BSIM3_MOD_WW: + mod->BSIM3Ww = value->rValue; + mod->BSIM3WwGiven = TRUE; + break; + case BSIM3_MOD_WWC: + mod->BSIM3Wwc = value->rValue; + mod->BSIM3WwcGiven = TRUE; + break; + case BSIM3_MOD_WWN: + mod->BSIM3Wwn = value->rValue; + mod->BSIM3WwnGiven = TRUE; + break; + case BSIM3_MOD_WWL: + mod->BSIM3Wwl = value->rValue; + mod->BSIM3WwlGiven = TRUE; + break; + case BSIM3_MOD_WWLC: + mod->BSIM3Wwlc = value->rValue; + mod->BSIM3WwlcGiven = TRUE; + break; + case BSIM3_MOD_WMIN: + mod->BSIM3Wmin = value->rValue; + mod->BSIM3WminGiven = TRUE; + break; + case BSIM3_MOD_WMAX: + mod->BSIM3Wmax = value->rValue; + mod->BSIM3WmaxGiven = TRUE; + break; + + case BSIM3_MOD_NOIA: + mod->BSIM3oxideTrapDensityA = value->rValue; + mod->BSIM3oxideTrapDensityAGiven = TRUE; + break; + case BSIM3_MOD_NOIB: + mod->BSIM3oxideTrapDensityB = value->rValue; + mod->BSIM3oxideTrapDensityBGiven = TRUE; + break; + case BSIM3_MOD_NOIC: + mod->BSIM3oxideTrapDensityC = value->rValue; + mod->BSIM3oxideTrapDensityCGiven = TRUE; + break; + case BSIM3_MOD_EM: + mod->BSIM3em = value->rValue; + mod->BSIM3emGiven = TRUE; + break; + case BSIM3_MOD_EF: + mod->BSIM3ef = value->rValue; + mod->BSIM3efGiven = TRUE; + break; + case BSIM3_MOD_AF: + mod->BSIM3af = value->rValue; + mod->BSIM3afGiven = TRUE; + break; + case BSIM3_MOD_KF: + mod->BSIM3kf = value->rValue; + mod->BSIM3kfGiven = TRUE; + break; + case BSIM3_MOD_NMOS: + if (value->iValue) + { + mod->BSIM3type = 1; + mod->BSIM3typeGiven = TRUE; + } + break; + case BSIM3_MOD_PMOS: + if (value->iValue) + { + mod->BSIM3type = -1; + mod->BSIM3typeGiven = TRUE; + } + break; + default: + return (E_BADPARM); } - return(OK); + return (OK); } - - diff --git a/src/spicelib/devices/bsim3/b3set.c b/src/spicelib/devices/bsim3/b3set.c index 93a7d9142..51db6987b 100644 --- a/src/spicelib/devices/bsim3/b3set.c +++ b/src/spicelib/devices/bsim3/b3set.c @@ -27,922 +27,947 @@ File: b3set.c #define Meter2Micron 1.0e6 int -BSIM3setup(matrix,inModel,ckt,states) -SMPmatrix *matrix; -GENmodel *inModel; -CKTcircuit *ckt; -int *states; +BSIM3setup (matrix, inModel, ckt, states) + SMPmatrix *matrix; + GENmodel *inModel; + CKTcircuit *ckt; + int *states; { -BSIM3model *model = (BSIM3model*)inModel; -BSIM3instance *here; -int error; -CKTnode *tmp; + BSIM3model *model = (BSIM3model *) inModel; + BSIM3instance *here; + int error; + CKTnode *tmp; - /* loop through all the BSIM3 device models */ - for( ; model != NULL; model = model->BSIM3nextModel ) + /* loop through all the BSIM3 device models */ + for (; model != NULL; model = model->BSIM3nextModel) { /* Default value Processing for BSIM3 MOSFET Models */ - if (!model->BSIM3typeGiven) - model->BSIM3type = NMOS; - if (!model->BSIM3mobModGiven) - model->BSIM3mobMod = 1; - if (!model->BSIM3binUnitGiven) - model->BSIM3binUnit = 1; - if (!model->BSIM3paramChkGiven) - model->BSIM3paramChk = 0; - if (!model->BSIM3capModGiven) - model->BSIM3capMod = 3; - if (!model->BSIM3noiModGiven) - model->BSIM3noiMod = 1; - if (!model->BSIM3versionGiven) - model->BSIM3version = "3.2.2"; - if (!model->BSIM3toxGiven) - model->BSIM3tox = 150.0e-10; - model->BSIM3cox = 3.453133e-11 / model->BSIM3tox; - if (!model->BSIM3toxmGiven) - model->BSIM3toxm = model->BSIM3tox; + if (!model->BSIM3typeGiven) + model->BSIM3type = NMOS; + if (!model->BSIM3mobModGiven) + model->BSIM3mobMod = 1; + if (!model->BSIM3binUnitGiven) + model->BSIM3binUnit = 1; + if (!model->BSIM3paramChkGiven) + model->BSIM3paramChk = 0; + if (!model->BSIM3capModGiven) + model->BSIM3capMod = 3; + if (!model->BSIM3noiModGiven) + model->BSIM3noiMod = 1; + if (!model->BSIM3versionGiven) + model->BSIM3version = "3.2.2"; + if (!model->BSIM3toxGiven) + model->BSIM3tox = 150.0e-10; + model->BSIM3cox = 3.453133e-11 / model->BSIM3tox; + if (!model->BSIM3toxmGiven) + model->BSIM3toxm = model->BSIM3tox; - if (!model->BSIM3cdscGiven) - model->BSIM3cdsc = 2.4e-4; /* unit Q/V/m^2 */ - if (!model->BSIM3cdscbGiven) - model->BSIM3cdscb = 0.0; /* unit Q/V/m^2 */ - if (!model->BSIM3cdscdGiven) - model->BSIM3cdscd = 0.0; /* unit Q/V/m^2 */ - if (!model->BSIM3citGiven) - model->BSIM3cit = 0.0; /* unit Q/V/m^2 */ - if (!model->BSIM3nfactorGiven) - model->BSIM3nfactor = 1; - if (!model->BSIM3xjGiven) - model->BSIM3xj = .15e-6; - if (!model->BSIM3vsatGiven) - model->BSIM3vsat = 8.0e4; /* unit m/s */ - if (!model->BSIM3atGiven) - model->BSIM3at = 3.3e4; /* unit m/s */ - if (!model->BSIM3a0Given) - model->BSIM3a0 = 1.0; - if (!model->BSIM3agsGiven) - model->BSIM3ags = 0.0; - if (!model->BSIM3a1Given) - model->BSIM3a1 = 0.0; - if (!model->BSIM3a2Given) - model->BSIM3a2 = 1.0; - if (!model->BSIM3ketaGiven) - model->BSIM3keta = -0.047; /* unit / V */ - if (!model->BSIM3nsubGiven) - model->BSIM3nsub = 6.0e16; /* unit 1/cm3 */ - if (!model->BSIM3npeakGiven) - model->BSIM3npeak = 1.7e17; /* unit 1/cm3 */ - if (!model->BSIM3ngateGiven) - model->BSIM3ngate = 0; /* unit 1/cm3 */ - if (!model->BSIM3vbmGiven) - model->BSIM3vbm = -3.0; - if (!model->BSIM3xtGiven) - model->BSIM3xt = 1.55e-7; - if (!model->BSIM3kt1Given) - model->BSIM3kt1 = -0.11; /* unit V */ - if (!model->BSIM3kt1lGiven) - model->BSIM3kt1l = 0.0; /* unit V*m */ - if (!model->BSIM3kt2Given) - model->BSIM3kt2 = 0.022; /* No unit */ - if (!model->BSIM3k3Given) - model->BSIM3k3 = 80.0; - if (!model->BSIM3k3bGiven) - model->BSIM3k3b = 0.0; - if (!model->BSIM3w0Given) - model->BSIM3w0 = 2.5e-6; - if (!model->BSIM3nlxGiven) - model->BSIM3nlx = 1.74e-7; - if (!model->BSIM3dvt0Given) - model->BSIM3dvt0 = 2.2; - if (!model->BSIM3dvt1Given) - model->BSIM3dvt1 = 0.53; - if (!model->BSIM3dvt2Given) - model->BSIM3dvt2 = -0.032; /* unit 1 / V */ + if (!model->BSIM3cdscGiven) + model->BSIM3cdsc = 2.4e-4; /* unit Q/V/m^2 */ + if (!model->BSIM3cdscbGiven) + model->BSIM3cdscb = 0.0; /* unit Q/V/m^2 */ + if (!model->BSIM3cdscdGiven) + model->BSIM3cdscd = 0.0; /* unit Q/V/m^2 */ + if (!model->BSIM3citGiven) + model->BSIM3cit = 0.0; /* unit Q/V/m^2 */ + if (!model->BSIM3nfactorGiven) + model->BSIM3nfactor = 1; + if (!model->BSIM3xjGiven) + model->BSIM3xj = .15e-6; + if (!model->BSIM3vsatGiven) + model->BSIM3vsat = 8.0e4; /* unit m/s */ + if (!model->BSIM3atGiven) + model->BSIM3at = 3.3e4; /* unit m/s */ + if (!model->BSIM3a0Given) + model->BSIM3a0 = 1.0; + if (!model->BSIM3agsGiven) + model->BSIM3ags = 0.0; + if (!model->BSIM3a1Given) + model->BSIM3a1 = 0.0; + if (!model->BSIM3a2Given) + model->BSIM3a2 = 1.0; + if (!model->BSIM3ketaGiven) + model->BSIM3keta = -0.047; /* unit / V */ + if (!model->BSIM3nsubGiven) + model->BSIM3nsub = 6.0e16; /* unit 1/cm3 */ + if (!model->BSIM3npeakGiven) + model->BSIM3npeak = 1.7e17; /* unit 1/cm3 */ + if (!model->BSIM3ngateGiven) + model->BSIM3ngate = 0; /* unit 1/cm3 */ + if (!model->BSIM3vbmGiven) + model->BSIM3vbm = -3.0; + if (!model->BSIM3xtGiven) + model->BSIM3xt = 1.55e-7; + if (!model->BSIM3kt1Given) + model->BSIM3kt1 = -0.11; /* unit V */ + if (!model->BSIM3kt1lGiven) + model->BSIM3kt1l = 0.0; /* unit V*m */ + if (!model->BSIM3kt2Given) + model->BSIM3kt2 = 0.022; /* No unit */ + if (!model->BSIM3k3Given) + model->BSIM3k3 = 80.0; + if (!model->BSIM3k3bGiven) + model->BSIM3k3b = 0.0; + if (!model->BSIM3w0Given) + model->BSIM3w0 = 2.5e-6; + if (!model->BSIM3nlxGiven) + model->BSIM3nlx = 1.74e-7; + if (!model->BSIM3dvt0Given) + model->BSIM3dvt0 = 2.2; + if (!model->BSIM3dvt1Given) + model->BSIM3dvt1 = 0.53; + if (!model->BSIM3dvt2Given) + model->BSIM3dvt2 = -0.032; /* unit 1 / V */ - if (!model->BSIM3dvt0wGiven) - model->BSIM3dvt0w = 0.0; - if (!model->BSIM3dvt1wGiven) - model->BSIM3dvt1w = 5.3e6; - if (!model->BSIM3dvt2wGiven) - model->BSIM3dvt2w = -0.032; + if (!model->BSIM3dvt0wGiven) + model->BSIM3dvt0w = 0.0; + if (!model->BSIM3dvt1wGiven) + model->BSIM3dvt1w = 5.3e6; + if (!model->BSIM3dvt2wGiven) + model->BSIM3dvt2w = -0.032; - if (!model->BSIM3droutGiven) - model->BSIM3drout = 0.56; - if (!model->BSIM3dsubGiven) - model->BSIM3dsub = model->BSIM3drout; - if (!model->BSIM3vth0Given) - model->BSIM3vth0 = (model->BSIM3type == NMOS) ? 0.7 : -0.7; - if (!model->BSIM3uaGiven) - model->BSIM3ua = 2.25e-9; /* unit m/V */ - if (!model->BSIM3ua1Given) - model->BSIM3ua1 = 4.31e-9; /* unit m/V */ - if (!model->BSIM3ubGiven) - model->BSIM3ub = 5.87e-19; /* unit (m/V)**2 */ - if (!model->BSIM3ub1Given) - model->BSIM3ub1 = -7.61e-18; /* unit (m/V)**2 */ - if (!model->BSIM3ucGiven) - model->BSIM3uc = (model->BSIM3mobMod == 3) ? -0.0465 : -0.0465e-9; - if (!model->BSIM3uc1Given) - model->BSIM3uc1 = (model->BSIM3mobMod == 3) ? -0.056 : -0.056e-9; - if (!model->BSIM3u0Given) - model->BSIM3u0 = (model->BSIM3type == NMOS) ? 0.067 : 0.025; - if (!model->BSIM3uteGiven) - model->BSIM3ute = -1.5; - if (!model->BSIM3voffGiven) - model->BSIM3voff = -0.08; - if (!model->BSIM3deltaGiven) - model->BSIM3delta = 0.01; - if (!model->BSIM3rdswGiven) - model->BSIM3rdsw = 0; - if (!model->BSIM3prwgGiven) - model->BSIM3prwg = 0.0; /* unit 1/V */ - if (!model->BSIM3prwbGiven) - model->BSIM3prwb = 0.0; - if (!model->BSIM3prtGiven) - if (!model->BSIM3prtGiven) - model->BSIM3prt = 0.0; - if (!model->BSIM3eta0Given) - model->BSIM3eta0 = 0.08; /* no unit */ - if (!model->BSIM3etabGiven) - model->BSIM3etab = -0.07; /* unit 1/V */ - if (!model->BSIM3pclmGiven) - model->BSIM3pclm = 1.3; /* no unit */ - if (!model->BSIM3pdibl1Given) - model->BSIM3pdibl1 = .39; /* no unit */ - if (!model->BSIM3pdibl2Given) - model->BSIM3pdibl2 = 0.0086; /* no unit */ - if (!model->BSIM3pdiblbGiven) - model->BSIM3pdiblb = 0.0; /* 1/V */ - if (!model->BSIM3pscbe1Given) - model->BSIM3pscbe1 = 4.24e8; - if (!model->BSIM3pscbe2Given) - model->BSIM3pscbe2 = 1.0e-5; - if (!model->BSIM3pvagGiven) - model->BSIM3pvag = 0.0; - if (!model->BSIM3wrGiven) - model->BSIM3wr = 1.0; - if (!model->BSIM3dwgGiven) - model->BSIM3dwg = 0.0; - if (!model->BSIM3dwbGiven) - model->BSIM3dwb = 0.0; - if (!model->BSIM3b0Given) - model->BSIM3b0 = 0.0; - if (!model->BSIM3b1Given) - model->BSIM3b1 = 0.0; - if (!model->BSIM3alpha0Given) - model->BSIM3alpha0 = 0.0; - if (!model->BSIM3alpha1Given) - model->BSIM3alpha1 = 0.0; - if (!model->BSIM3beta0Given) - model->BSIM3beta0 = 30.0; - if (!model->BSIM3ijthGiven) - model->BSIM3ijth = 0.1; /* unit A */ + if (!model->BSIM3droutGiven) + model->BSIM3drout = 0.56; + if (!model->BSIM3dsubGiven) + model->BSIM3dsub = model->BSIM3drout; + if (!model->BSIM3vth0Given) + model->BSIM3vth0 = (model->BSIM3type == NMOS) ? 0.7 : -0.7; + if (!model->BSIM3uaGiven) + model->BSIM3ua = 2.25e-9; /* unit m/V */ + if (!model->BSIM3ua1Given) + model->BSIM3ua1 = 4.31e-9; /* unit m/V */ + if (!model->BSIM3ubGiven) + model->BSIM3ub = 5.87e-19; /* unit (m/V)**2 */ + if (!model->BSIM3ub1Given) + model->BSIM3ub1 = -7.61e-18; /* unit (m/V)**2 */ + if (!model->BSIM3ucGiven) + model->BSIM3uc = (model->BSIM3mobMod == 3) ? -0.0465 : -0.0465e-9; + if (!model->BSIM3uc1Given) + model->BSIM3uc1 = (model->BSIM3mobMod == 3) ? -0.056 : -0.056e-9; + if (!model->BSIM3u0Given) + model->BSIM3u0 = (model->BSIM3type == NMOS) ? 0.067 : 0.025; + if (!model->BSIM3uteGiven) + model->BSIM3ute = -1.5; + if (!model->BSIM3voffGiven) + model->BSIM3voff = -0.08; + if (!model->BSIM3deltaGiven) + model->BSIM3delta = 0.01; + if (!model->BSIM3rdswGiven) + model->BSIM3rdsw = 0; + if (!model->BSIM3prwgGiven) + model->BSIM3prwg = 0.0; /* unit 1/V */ + if (!model->BSIM3prwbGiven) + model->BSIM3prwb = 0.0; + if (!model->BSIM3prtGiven) + if (!model->BSIM3prtGiven) + model->BSIM3prt = 0.0; + if (!model->BSIM3eta0Given) + model->BSIM3eta0 = 0.08; /* no unit */ + if (!model->BSIM3etabGiven) + model->BSIM3etab = -0.07; /* unit 1/V */ + if (!model->BSIM3pclmGiven) + model->BSIM3pclm = 1.3; /* no unit */ + if (!model->BSIM3pdibl1Given) + model->BSIM3pdibl1 = .39; /* no unit */ + if (!model->BSIM3pdibl2Given) + model->BSIM3pdibl2 = 0.0086; /* no unit */ + if (!model->BSIM3pdiblbGiven) + model->BSIM3pdiblb = 0.0; /* 1/V */ + if (!model->BSIM3pscbe1Given) + model->BSIM3pscbe1 = 4.24e8; + if (!model->BSIM3pscbe2Given) + model->BSIM3pscbe2 = 1.0e-5; + if (!model->BSIM3pvagGiven) + model->BSIM3pvag = 0.0; + if (!model->BSIM3wrGiven) + model->BSIM3wr = 1.0; + if (!model->BSIM3dwgGiven) + model->BSIM3dwg = 0.0; + if (!model->BSIM3dwbGiven) + model->BSIM3dwb = 0.0; + if (!model->BSIM3b0Given) + model->BSIM3b0 = 0.0; + if (!model->BSIM3b1Given) + model->BSIM3b1 = 0.0; + if (!model->BSIM3alpha0Given) + model->BSIM3alpha0 = 0.0; + if (!model->BSIM3alpha1Given) + model->BSIM3alpha1 = 0.0; + if (!model->BSIM3beta0Given) + model->BSIM3beta0 = 30.0; + if (!model->BSIM3ijthGiven) + model->BSIM3ijth = 0.1; /* unit A */ - if (!model->BSIM3elmGiven) - model->BSIM3elm = 5.0; - if (!model->BSIM3cgslGiven) - model->BSIM3cgsl = 0.0; - if (!model->BSIM3cgdlGiven) - model->BSIM3cgdl = 0.0; - if (!model->BSIM3ckappaGiven) - model->BSIM3ckappa = 0.6; - if (!model->BSIM3clcGiven) - model->BSIM3clc = 0.1e-6; - if (!model->BSIM3cleGiven) - model->BSIM3cle = 0.6; - if (!model->BSIM3vfbcvGiven) - model->BSIM3vfbcv = -1.0; - if (!model->BSIM3acdeGiven) - model->BSIM3acde = 1.0; - if (!model->BSIM3moinGiven) - model->BSIM3moin = 15.0; - if (!model->BSIM3noffGiven) - model->BSIM3noff = 1.0; - if (!model->BSIM3voffcvGiven) - model->BSIM3voffcv = 0.0; - if (!model->BSIM3tcjGiven) - model->BSIM3tcj = 0.0; - if (!model->BSIM3tpbGiven) - model->BSIM3tpb = 0.0; - if (!model->BSIM3tcjswGiven) - model->BSIM3tcjsw = 0.0; - if (!model->BSIM3tpbswGiven) - model->BSIM3tpbsw = 0.0; - if (!model->BSIM3tcjswgGiven) - model->BSIM3tcjswg = 0.0; - if (!model->BSIM3tpbswgGiven) - model->BSIM3tpbswg = 0.0; + if (!model->BSIM3elmGiven) + model->BSIM3elm = 5.0; + if (!model->BSIM3cgslGiven) + model->BSIM3cgsl = 0.0; + if (!model->BSIM3cgdlGiven) + model->BSIM3cgdl = 0.0; + if (!model->BSIM3ckappaGiven) + model->BSIM3ckappa = 0.6; + if (!model->BSIM3clcGiven) + model->BSIM3clc = 0.1e-6; + if (!model->BSIM3cleGiven) + model->BSIM3cle = 0.6; + if (!model->BSIM3vfbcvGiven) + model->BSIM3vfbcv = -1.0; + if (!model->BSIM3acdeGiven) + model->BSIM3acde = 1.0; + if (!model->BSIM3moinGiven) + model->BSIM3moin = 15.0; + if (!model->BSIM3noffGiven) + model->BSIM3noff = 1.0; + if (!model->BSIM3voffcvGiven) + model->BSIM3voffcv = 0.0; + if (!model->BSIM3tcjGiven) + model->BSIM3tcj = 0.0; + if (!model->BSIM3tpbGiven) + model->BSIM3tpb = 0.0; + if (!model->BSIM3tcjswGiven) + model->BSIM3tcjsw = 0.0; + if (!model->BSIM3tpbswGiven) + model->BSIM3tpbsw = 0.0; + if (!model->BSIM3tcjswgGiven) + model->BSIM3tcjswg = 0.0; + if (!model->BSIM3tpbswgGiven) + model->BSIM3tpbswg = 0.0; - /* Length dependence */ - if (!model->BSIM3lcdscGiven) - model->BSIM3lcdsc = 0.0; - if (!model->BSIM3lcdscbGiven) - model->BSIM3lcdscb = 0.0; - if (!model->BSIM3lcdscdGiven) - model->BSIM3lcdscd = 0.0; - if (!model->BSIM3lcitGiven) - model->BSIM3lcit = 0.0; - if (!model->BSIM3lnfactorGiven) - model->BSIM3lnfactor = 0.0; - if (!model->BSIM3lxjGiven) - model->BSIM3lxj = 0.0; - if (!model->BSIM3lvsatGiven) - model->BSIM3lvsat = 0.0; - if (!model->BSIM3latGiven) - model->BSIM3lat = 0.0; - if (!model->BSIM3la0Given) - model->BSIM3la0 = 0.0; - if (!model->BSIM3lagsGiven) - model->BSIM3lags = 0.0; - if (!model->BSIM3la1Given) - model->BSIM3la1 = 0.0; - if (!model->BSIM3la2Given) - model->BSIM3la2 = 0.0; - if (!model->BSIM3lketaGiven) - model->BSIM3lketa = 0.0; - if (!model->BSIM3lnsubGiven) - model->BSIM3lnsub = 0.0; - if (!model->BSIM3lnpeakGiven) - model->BSIM3lnpeak = 0.0; - if (!model->BSIM3lngateGiven) - model->BSIM3lngate = 0.0; - if (!model->BSIM3lvbmGiven) - model->BSIM3lvbm = 0.0; - if (!model->BSIM3lxtGiven) - model->BSIM3lxt = 0.0; - if (!model->BSIM3lkt1Given) - model->BSIM3lkt1 = 0.0; - if (!model->BSIM3lkt1lGiven) - model->BSIM3lkt1l = 0.0; - if (!model->BSIM3lkt2Given) - model->BSIM3lkt2 = 0.0; - if (!model->BSIM3lk3Given) - model->BSIM3lk3 = 0.0; - if (!model->BSIM3lk3bGiven) - model->BSIM3lk3b = 0.0; - if (!model->BSIM3lw0Given) - model->BSIM3lw0 = 0.0; - if (!model->BSIM3lnlxGiven) - model->BSIM3lnlx = 0.0; - if (!model->BSIM3ldvt0Given) - model->BSIM3ldvt0 = 0.0; - if (!model->BSIM3ldvt1Given) - model->BSIM3ldvt1 = 0.0; - if (!model->BSIM3ldvt2Given) - model->BSIM3ldvt2 = 0.0; - if (!model->BSIM3ldvt0wGiven) - model->BSIM3ldvt0w = 0.0; - if (!model->BSIM3ldvt1wGiven) - model->BSIM3ldvt1w = 0.0; - if (!model->BSIM3ldvt2wGiven) - model->BSIM3ldvt2w = 0.0; - if (!model->BSIM3ldroutGiven) - model->BSIM3ldrout = 0.0; - if (!model->BSIM3ldsubGiven) - model->BSIM3ldsub = 0.0; - if (!model->BSIM3lvth0Given) - model->BSIM3lvth0 = 0.0; - if (!model->BSIM3luaGiven) - model->BSIM3lua = 0.0; - if (!model->BSIM3lua1Given) - model->BSIM3lua1 = 0.0; - if (!model->BSIM3lubGiven) - model->BSIM3lub = 0.0; - if (!model->BSIM3lub1Given) - model->BSIM3lub1 = 0.0; - if (!model->BSIM3lucGiven) - model->BSIM3luc = 0.0; - if (!model->BSIM3luc1Given) - model->BSIM3luc1 = 0.0; - if (!model->BSIM3lu0Given) - model->BSIM3lu0 = 0.0; - if (!model->BSIM3luteGiven) - model->BSIM3lute = 0.0; - if (!model->BSIM3lvoffGiven) - model->BSIM3lvoff = 0.0; - if (!model->BSIM3ldeltaGiven) - model->BSIM3ldelta = 0.0; - if (!model->BSIM3lrdswGiven) - model->BSIM3lrdsw = 0.0; - if (!model->BSIM3lprwbGiven) - model->BSIM3lprwb = 0.0; - if (!model->BSIM3lprwgGiven) - model->BSIM3lprwg = 0.0; - if (!model->BSIM3lprtGiven) - model->BSIM3lprt = 0.0; - if (!model->BSIM3leta0Given) - model->BSIM3leta0 = 0.0; - if (!model->BSIM3letabGiven) - model->BSIM3letab = -0.0; - if (!model->BSIM3lpclmGiven) - model->BSIM3lpclm = 0.0; - if (!model->BSIM3lpdibl1Given) - model->BSIM3lpdibl1 = 0.0; - if (!model->BSIM3lpdibl2Given) - model->BSIM3lpdibl2 = 0.0; - if (!model->BSIM3lpdiblbGiven) - model->BSIM3lpdiblb = 0.0; - if (!model->BSIM3lpscbe1Given) - model->BSIM3lpscbe1 = 0.0; - if (!model->BSIM3lpscbe2Given) - model->BSIM3lpscbe2 = 0.0; - if (!model->BSIM3lpvagGiven) - model->BSIM3lpvag = 0.0; - if (!model->BSIM3lwrGiven) - model->BSIM3lwr = 0.0; - if (!model->BSIM3ldwgGiven) - model->BSIM3ldwg = 0.0; - if (!model->BSIM3ldwbGiven) - model->BSIM3ldwb = 0.0; - if (!model->BSIM3lb0Given) - model->BSIM3lb0 = 0.0; - if (!model->BSIM3lb1Given) - model->BSIM3lb1 = 0.0; - if (!model->BSIM3lalpha0Given) - model->BSIM3lalpha0 = 0.0; - if (!model->BSIM3lalpha1Given) - model->BSIM3lalpha1 = 0.0; - if (!model->BSIM3lbeta0Given) - model->BSIM3lbeta0 = 0.0; - if (!model->BSIM3lvfbGiven) - model->BSIM3lvfb = 0.0; + /* Length dependence */ + if (!model->BSIM3lcdscGiven) + model->BSIM3lcdsc = 0.0; + if (!model->BSIM3lcdscbGiven) + model->BSIM3lcdscb = 0.0; + if (!model->BSIM3lcdscdGiven) + model->BSIM3lcdscd = 0.0; + if (!model->BSIM3lcitGiven) + model->BSIM3lcit = 0.0; + if (!model->BSIM3lnfactorGiven) + model->BSIM3lnfactor = 0.0; + if (!model->BSIM3lxjGiven) + model->BSIM3lxj = 0.0; + if (!model->BSIM3lvsatGiven) + model->BSIM3lvsat = 0.0; + if (!model->BSIM3latGiven) + model->BSIM3lat = 0.0; + if (!model->BSIM3la0Given) + model->BSIM3la0 = 0.0; + if (!model->BSIM3lagsGiven) + model->BSIM3lags = 0.0; + if (!model->BSIM3la1Given) + model->BSIM3la1 = 0.0; + if (!model->BSIM3la2Given) + model->BSIM3la2 = 0.0; + if (!model->BSIM3lketaGiven) + model->BSIM3lketa = 0.0; + if (!model->BSIM3lnsubGiven) + model->BSIM3lnsub = 0.0; + if (!model->BSIM3lnpeakGiven) + model->BSIM3lnpeak = 0.0; + if (!model->BSIM3lngateGiven) + model->BSIM3lngate = 0.0; + if (!model->BSIM3lvbmGiven) + model->BSIM3lvbm = 0.0; + if (!model->BSIM3lxtGiven) + model->BSIM3lxt = 0.0; + if (!model->BSIM3lkt1Given) + model->BSIM3lkt1 = 0.0; + if (!model->BSIM3lkt1lGiven) + model->BSIM3lkt1l = 0.0; + if (!model->BSIM3lkt2Given) + model->BSIM3lkt2 = 0.0; + if (!model->BSIM3lk3Given) + model->BSIM3lk3 = 0.0; + if (!model->BSIM3lk3bGiven) + model->BSIM3lk3b = 0.0; + if (!model->BSIM3lw0Given) + model->BSIM3lw0 = 0.0; + if (!model->BSIM3lnlxGiven) + model->BSIM3lnlx = 0.0; + if (!model->BSIM3ldvt0Given) + model->BSIM3ldvt0 = 0.0; + if (!model->BSIM3ldvt1Given) + model->BSIM3ldvt1 = 0.0; + if (!model->BSIM3ldvt2Given) + model->BSIM3ldvt2 = 0.0; + if (!model->BSIM3ldvt0wGiven) + model->BSIM3ldvt0w = 0.0; + if (!model->BSIM3ldvt1wGiven) + model->BSIM3ldvt1w = 0.0; + if (!model->BSIM3ldvt2wGiven) + model->BSIM3ldvt2w = 0.0; + if (!model->BSIM3ldroutGiven) + model->BSIM3ldrout = 0.0; + if (!model->BSIM3ldsubGiven) + model->BSIM3ldsub = 0.0; + if (!model->BSIM3lvth0Given) + model->BSIM3lvth0 = 0.0; + if (!model->BSIM3luaGiven) + model->BSIM3lua = 0.0; + if (!model->BSIM3lua1Given) + model->BSIM3lua1 = 0.0; + if (!model->BSIM3lubGiven) + model->BSIM3lub = 0.0; + if (!model->BSIM3lub1Given) + model->BSIM3lub1 = 0.0; + if (!model->BSIM3lucGiven) + model->BSIM3luc = 0.0; + if (!model->BSIM3luc1Given) + model->BSIM3luc1 = 0.0; + if (!model->BSIM3lu0Given) + model->BSIM3lu0 = 0.0; + if (!model->BSIM3luteGiven) + model->BSIM3lute = 0.0; + if (!model->BSIM3lvoffGiven) + model->BSIM3lvoff = 0.0; + if (!model->BSIM3ldeltaGiven) + model->BSIM3ldelta = 0.0; + if (!model->BSIM3lrdswGiven) + model->BSIM3lrdsw = 0.0; + if (!model->BSIM3lprwbGiven) + model->BSIM3lprwb = 0.0; + if (!model->BSIM3lprwgGiven) + model->BSIM3lprwg = 0.0; + if (!model->BSIM3lprtGiven) + model->BSIM3lprt = 0.0; + if (!model->BSIM3leta0Given) + model->BSIM3leta0 = 0.0; + if (!model->BSIM3letabGiven) + model->BSIM3letab = -0.0; + if (!model->BSIM3lpclmGiven) + model->BSIM3lpclm = 0.0; + if (!model->BSIM3lpdibl1Given) + model->BSIM3lpdibl1 = 0.0; + if (!model->BSIM3lpdibl2Given) + model->BSIM3lpdibl2 = 0.0; + if (!model->BSIM3lpdiblbGiven) + model->BSIM3lpdiblb = 0.0; + if (!model->BSIM3lpscbe1Given) + model->BSIM3lpscbe1 = 0.0; + if (!model->BSIM3lpscbe2Given) + model->BSIM3lpscbe2 = 0.0; + if (!model->BSIM3lpvagGiven) + model->BSIM3lpvag = 0.0; + if (!model->BSIM3lwrGiven) + model->BSIM3lwr = 0.0; + if (!model->BSIM3ldwgGiven) + model->BSIM3ldwg = 0.0; + if (!model->BSIM3ldwbGiven) + model->BSIM3ldwb = 0.0; + if (!model->BSIM3lb0Given) + model->BSIM3lb0 = 0.0; + if (!model->BSIM3lb1Given) + model->BSIM3lb1 = 0.0; + if (!model->BSIM3lalpha0Given) + model->BSIM3lalpha0 = 0.0; + if (!model->BSIM3lalpha1Given) + model->BSIM3lalpha1 = 0.0; + if (!model->BSIM3lbeta0Given) + model->BSIM3lbeta0 = 0.0; + if (!model->BSIM3lvfbGiven) + model->BSIM3lvfb = 0.0; - if (!model->BSIM3lelmGiven) - model->BSIM3lelm = 0.0; - if (!model->BSIM3lcgslGiven) - model->BSIM3lcgsl = 0.0; - if (!model->BSIM3lcgdlGiven) - model->BSIM3lcgdl = 0.0; - if (!model->BSIM3lckappaGiven) - model->BSIM3lckappa = 0.0; - if (!model->BSIM3lclcGiven) - model->BSIM3lclc = 0.0; - if (!model->BSIM3lcleGiven) - model->BSIM3lcle = 0.0; - if (!model->BSIM3lcfGiven) - model->BSIM3lcf = 0.0; - if (!model->BSIM3lvfbcvGiven) - model->BSIM3lvfbcv = 0.0; - if (!model->BSIM3lacdeGiven) - model->BSIM3lacde = 0.0; - if (!model->BSIM3lmoinGiven) - model->BSIM3lmoin = 0.0; - if (!model->BSIM3lnoffGiven) - model->BSIM3lnoff = 0.0; - if (!model->BSIM3lvoffcvGiven) - model->BSIM3lvoffcv = 0.0; + if (!model->BSIM3lelmGiven) + model->BSIM3lelm = 0.0; + if (!model->BSIM3lcgslGiven) + model->BSIM3lcgsl = 0.0; + if (!model->BSIM3lcgdlGiven) + model->BSIM3lcgdl = 0.0; + if (!model->BSIM3lckappaGiven) + model->BSIM3lckappa = 0.0; + if (!model->BSIM3lclcGiven) + model->BSIM3lclc = 0.0; + if (!model->BSIM3lcleGiven) + model->BSIM3lcle = 0.0; + if (!model->BSIM3lcfGiven) + model->BSIM3lcf = 0.0; + if (!model->BSIM3lvfbcvGiven) + model->BSIM3lvfbcv = 0.0; + if (!model->BSIM3lacdeGiven) + model->BSIM3lacde = 0.0; + if (!model->BSIM3lmoinGiven) + model->BSIM3lmoin = 0.0; + if (!model->BSIM3lnoffGiven) + model->BSIM3lnoff = 0.0; + if (!model->BSIM3lvoffcvGiven) + model->BSIM3lvoffcv = 0.0; - /* Width dependence */ - if (!model->BSIM3wcdscGiven) - model->BSIM3wcdsc = 0.0; - if (!model->BSIM3wcdscbGiven) - model->BSIM3wcdscb = 0.0; - if (!model->BSIM3wcdscdGiven) - model->BSIM3wcdscd = 0.0; - if (!model->BSIM3wcitGiven) - model->BSIM3wcit = 0.0; - if (!model->BSIM3wnfactorGiven) - model->BSIM3wnfactor = 0.0; - if (!model->BSIM3wxjGiven) - model->BSIM3wxj = 0.0; - if (!model->BSIM3wvsatGiven) - model->BSIM3wvsat = 0.0; - if (!model->BSIM3watGiven) - model->BSIM3wat = 0.0; - if (!model->BSIM3wa0Given) - model->BSIM3wa0 = 0.0; - if (!model->BSIM3wagsGiven) - model->BSIM3wags = 0.0; - if (!model->BSIM3wa1Given) - model->BSIM3wa1 = 0.0; - if (!model->BSIM3wa2Given) - model->BSIM3wa2 = 0.0; - if (!model->BSIM3wketaGiven) - model->BSIM3wketa = 0.0; - if (!model->BSIM3wnsubGiven) - model->BSIM3wnsub = 0.0; - if (!model->BSIM3wnpeakGiven) - model->BSIM3wnpeak = 0.0; - if (!model->BSIM3wngateGiven) - model->BSIM3wngate = 0.0; - if (!model->BSIM3wvbmGiven) - model->BSIM3wvbm = 0.0; - if (!model->BSIM3wxtGiven) - model->BSIM3wxt = 0.0; - if (!model->BSIM3wkt1Given) - model->BSIM3wkt1 = 0.0; - if (!model->BSIM3wkt1lGiven) - model->BSIM3wkt1l = 0.0; - if (!model->BSIM3wkt2Given) - model->BSIM3wkt2 = 0.0; - if (!model->BSIM3wk3Given) - model->BSIM3wk3 = 0.0; - if (!model->BSIM3wk3bGiven) - model->BSIM3wk3b = 0.0; - if (!model->BSIM3ww0Given) - model->BSIM3ww0 = 0.0; - if (!model->BSIM3wnlxGiven) - model->BSIM3wnlx = 0.0; - if (!model->BSIM3wdvt0Given) - model->BSIM3wdvt0 = 0.0; - if (!model->BSIM3wdvt1Given) - model->BSIM3wdvt1 = 0.0; - if (!model->BSIM3wdvt2Given) - model->BSIM3wdvt2 = 0.0; - if (!model->BSIM3wdvt0wGiven) - model->BSIM3wdvt0w = 0.0; - if (!model->BSIM3wdvt1wGiven) - model->BSIM3wdvt1w = 0.0; - if (!model->BSIM3wdvt2wGiven) - model->BSIM3wdvt2w = 0.0; - if (!model->BSIM3wdroutGiven) - model->BSIM3wdrout = 0.0; - if (!model->BSIM3wdsubGiven) - model->BSIM3wdsub = 0.0; - if (!model->BSIM3wvth0Given) - model->BSIM3wvth0 = 0.0; - if (!model->BSIM3wuaGiven) - model->BSIM3wua = 0.0; - if (!model->BSIM3wua1Given) - model->BSIM3wua1 = 0.0; - if (!model->BSIM3wubGiven) - model->BSIM3wub = 0.0; - if (!model->BSIM3wub1Given) - model->BSIM3wub1 = 0.0; - if (!model->BSIM3wucGiven) - model->BSIM3wuc = 0.0; - if (!model->BSIM3wuc1Given) - model->BSIM3wuc1 = 0.0; - if (!model->BSIM3wu0Given) - model->BSIM3wu0 = 0.0; - if (!model->BSIM3wuteGiven) - model->BSIM3wute = 0.0; - if (!model->BSIM3wvoffGiven) - model->BSIM3wvoff = 0.0; - if (!model->BSIM3wdeltaGiven) - model->BSIM3wdelta = 0.0; - if (!model->BSIM3wrdswGiven) - model->BSIM3wrdsw = 0.0; - if (!model->BSIM3wprwbGiven) - model->BSIM3wprwb = 0.0; - if (!model->BSIM3wprwgGiven) - model->BSIM3wprwg = 0.0; - if (!model->BSIM3wprtGiven) - model->BSIM3wprt = 0.0; - if (!model->BSIM3weta0Given) - model->BSIM3weta0 = 0.0; - if (!model->BSIM3wetabGiven) - model->BSIM3wetab = 0.0; - if (!model->BSIM3wpclmGiven) - model->BSIM3wpclm = 0.0; - if (!model->BSIM3wpdibl1Given) - model->BSIM3wpdibl1 = 0.0; - if (!model->BSIM3wpdibl2Given) - model->BSIM3wpdibl2 = 0.0; - if (!model->BSIM3wpdiblbGiven) - model->BSIM3wpdiblb = 0.0; - if (!model->BSIM3wpscbe1Given) - model->BSIM3wpscbe1 = 0.0; - if (!model->BSIM3wpscbe2Given) - model->BSIM3wpscbe2 = 0.0; - if (!model->BSIM3wpvagGiven) - model->BSIM3wpvag = 0.0; - if (!model->BSIM3wwrGiven) - model->BSIM3wwr = 0.0; - if (!model->BSIM3wdwgGiven) - model->BSIM3wdwg = 0.0; - if (!model->BSIM3wdwbGiven) - model->BSIM3wdwb = 0.0; - if (!model->BSIM3wb0Given) - model->BSIM3wb0 = 0.0; - if (!model->BSIM3wb1Given) - model->BSIM3wb1 = 0.0; - if (!model->BSIM3walpha0Given) - model->BSIM3walpha0 = 0.0; - if (!model->BSIM3walpha1Given) - model->BSIM3walpha1 = 0.0; - if (!model->BSIM3wbeta0Given) - model->BSIM3wbeta0 = 0.0; - if (!model->BSIM3wvfbGiven) - model->BSIM3wvfb = 0.0; + /* Width dependence */ + if (!model->BSIM3wcdscGiven) + model->BSIM3wcdsc = 0.0; + if (!model->BSIM3wcdscbGiven) + model->BSIM3wcdscb = 0.0; + if (!model->BSIM3wcdscdGiven) + model->BSIM3wcdscd = 0.0; + if (!model->BSIM3wcitGiven) + model->BSIM3wcit = 0.0; + if (!model->BSIM3wnfactorGiven) + model->BSIM3wnfactor = 0.0; + if (!model->BSIM3wxjGiven) + model->BSIM3wxj = 0.0; + if (!model->BSIM3wvsatGiven) + model->BSIM3wvsat = 0.0; + if (!model->BSIM3watGiven) + model->BSIM3wat = 0.0; + if (!model->BSIM3wa0Given) + model->BSIM3wa0 = 0.0; + if (!model->BSIM3wagsGiven) + model->BSIM3wags = 0.0; + if (!model->BSIM3wa1Given) + model->BSIM3wa1 = 0.0; + if (!model->BSIM3wa2Given) + model->BSIM3wa2 = 0.0; + if (!model->BSIM3wketaGiven) + model->BSIM3wketa = 0.0; + if (!model->BSIM3wnsubGiven) + model->BSIM3wnsub = 0.0; + if (!model->BSIM3wnpeakGiven) + model->BSIM3wnpeak = 0.0; + if (!model->BSIM3wngateGiven) + model->BSIM3wngate = 0.0; + if (!model->BSIM3wvbmGiven) + model->BSIM3wvbm = 0.0; + if (!model->BSIM3wxtGiven) + model->BSIM3wxt = 0.0; + if (!model->BSIM3wkt1Given) + model->BSIM3wkt1 = 0.0; + if (!model->BSIM3wkt1lGiven) + model->BSIM3wkt1l = 0.0; + if (!model->BSIM3wkt2Given) + model->BSIM3wkt2 = 0.0; + if (!model->BSIM3wk3Given) + model->BSIM3wk3 = 0.0; + if (!model->BSIM3wk3bGiven) + model->BSIM3wk3b = 0.0; + if (!model->BSIM3ww0Given) + model->BSIM3ww0 = 0.0; + if (!model->BSIM3wnlxGiven) + model->BSIM3wnlx = 0.0; + if (!model->BSIM3wdvt0Given) + model->BSIM3wdvt0 = 0.0; + if (!model->BSIM3wdvt1Given) + model->BSIM3wdvt1 = 0.0; + if (!model->BSIM3wdvt2Given) + model->BSIM3wdvt2 = 0.0; + if (!model->BSIM3wdvt0wGiven) + model->BSIM3wdvt0w = 0.0; + if (!model->BSIM3wdvt1wGiven) + model->BSIM3wdvt1w = 0.0; + if (!model->BSIM3wdvt2wGiven) + model->BSIM3wdvt2w = 0.0; + if (!model->BSIM3wdroutGiven) + model->BSIM3wdrout = 0.0; + if (!model->BSIM3wdsubGiven) + model->BSIM3wdsub = 0.0; + if (!model->BSIM3wvth0Given) + model->BSIM3wvth0 = 0.0; + if (!model->BSIM3wuaGiven) + model->BSIM3wua = 0.0; + if (!model->BSIM3wua1Given) + model->BSIM3wua1 = 0.0; + if (!model->BSIM3wubGiven) + model->BSIM3wub = 0.0; + if (!model->BSIM3wub1Given) + model->BSIM3wub1 = 0.0; + if (!model->BSIM3wucGiven) + model->BSIM3wuc = 0.0; + if (!model->BSIM3wuc1Given) + model->BSIM3wuc1 = 0.0; + if (!model->BSIM3wu0Given) + model->BSIM3wu0 = 0.0; + if (!model->BSIM3wuteGiven) + model->BSIM3wute = 0.0; + if (!model->BSIM3wvoffGiven) + model->BSIM3wvoff = 0.0; + if (!model->BSIM3wdeltaGiven) + model->BSIM3wdelta = 0.0; + if (!model->BSIM3wrdswGiven) + model->BSIM3wrdsw = 0.0; + if (!model->BSIM3wprwbGiven) + model->BSIM3wprwb = 0.0; + if (!model->BSIM3wprwgGiven) + model->BSIM3wprwg = 0.0; + if (!model->BSIM3wprtGiven) + model->BSIM3wprt = 0.0; + if (!model->BSIM3weta0Given) + model->BSIM3weta0 = 0.0; + if (!model->BSIM3wetabGiven) + model->BSIM3wetab = 0.0; + if (!model->BSIM3wpclmGiven) + model->BSIM3wpclm = 0.0; + if (!model->BSIM3wpdibl1Given) + model->BSIM3wpdibl1 = 0.0; + if (!model->BSIM3wpdibl2Given) + model->BSIM3wpdibl2 = 0.0; + if (!model->BSIM3wpdiblbGiven) + model->BSIM3wpdiblb = 0.0; + if (!model->BSIM3wpscbe1Given) + model->BSIM3wpscbe1 = 0.0; + if (!model->BSIM3wpscbe2Given) + model->BSIM3wpscbe2 = 0.0; + if (!model->BSIM3wpvagGiven) + model->BSIM3wpvag = 0.0; + if (!model->BSIM3wwrGiven) + model->BSIM3wwr = 0.0; + if (!model->BSIM3wdwgGiven) + model->BSIM3wdwg = 0.0; + if (!model->BSIM3wdwbGiven) + model->BSIM3wdwb = 0.0; + if (!model->BSIM3wb0Given) + model->BSIM3wb0 = 0.0; + if (!model->BSIM3wb1Given) + model->BSIM3wb1 = 0.0; + if (!model->BSIM3walpha0Given) + model->BSIM3walpha0 = 0.0; + if (!model->BSIM3walpha1Given) + model->BSIM3walpha1 = 0.0; + if (!model->BSIM3wbeta0Given) + model->BSIM3wbeta0 = 0.0; + if (!model->BSIM3wvfbGiven) + model->BSIM3wvfb = 0.0; - if (!model->BSIM3welmGiven) - model->BSIM3welm = 0.0; - if (!model->BSIM3wcgslGiven) - model->BSIM3wcgsl = 0.0; - if (!model->BSIM3wcgdlGiven) - model->BSIM3wcgdl = 0.0; - if (!model->BSIM3wckappaGiven) - model->BSIM3wckappa = 0.0; - if (!model->BSIM3wcfGiven) - model->BSIM3wcf = 0.0; - if (!model->BSIM3wclcGiven) - model->BSIM3wclc = 0.0; - if (!model->BSIM3wcleGiven) - model->BSIM3wcle = 0.0; - if (!model->BSIM3wvfbcvGiven) - model->BSIM3wvfbcv = 0.0; - if (!model->BSIM3wacdeGiven) - model->BSIM3wacde = 0.0; - if (!model->BSIM3wmoinGiven) - model->BSIM3wmoin = 0.0; - if (!model->BSIM3wnoffGiven) - model->BSIM3wnoff = 0.0; - if (!model->BSIM3wvoffcvGiven) - model->BSIM3wvoffcv = 0.0; + if (!model->BSIM3welmGiven) + model->BSIM3welm = 0.0; + if (!model->BSIM3wcgslGiven) + model->BSIM3wcgsl = 0.0; + if (!model->BSIM3wcgdlGiven) + model->BSIM3wcgdl = 0.0; + if (!model->BSIM3wckappaGiven) + model->BSIM3wckappa = 0.0; + if (!model->BSIM3wcfGiven) + model->BSIM3wcf = 0.0; + if (!model->BSIM3wclcGiven) + model->BSIM3wclc = 0.0; + if (!model->BSIM3wcleGiven) + model->BSIM3wcle = 0.0; + if (!model->BSIM3wvfbcvGiven) + model->BSIM3wvfbcv = 0.0; + if (!model->BSIM3wacdeGiven) + model->BSIM3wacde = 0.0; + if (!model->BSIM3wmoinGiven) + model->BSIM3wmoin = 0.0; + if (!model->BSIM3wnoffGiven) + model->BSIM3wnoff = 0.0; + if (!model->BSIM3wvoffcvGiven) + model->BSIM3wvoffcv = 0.0; - /* Cross-term dependence */ - if (!model->BSIM3pcdscGiven) - model->BSIM3pcdsc = 0.0; - if (!model->BSIM3pcdscbGiven) - model->BSIM3pcdscb = 0.0; - if (!model->BSIM3pcdscdGiven) - model->BSIM3pcdscd = 0.0; - if (!model->BSIM3pcitGiven) - model->BSIM3pcit = 0.0; - if (!model->BSIM3pnfactorGiven) - model->BSIM3pnfactor = 0.0; - if (!model->BSIM3pxjGiven) - model->BSIM3pxj = 0.0; - if (!model->BSIM3pvsatGiven) - model->BSIM3pvsat = 0.0; - if (!model->BSIM3patGiven) - model->BSIM3pat = 0.0; - if (!model->BSIM3pa0Given) - model->BSIM3pa0 = 0.0; - - if (!model->BSIM3pagsGiven) - model->BSIM3pags = 0.0; - if (!model->BSIM3pa1Given) - model->BSIM3pa1 = 0.0; - if (!model->BSIM3pa2Given) - model->BSIM3pa2 = 0.0; - if (!model->BSIM3pketaGiven) - model->BSIM3pketa = 0.0; - if (!model->BSIM3pnsubGiven) - model->BSIM3pnsub = 0.0; - if (!model->BSIM3pnpeakGiven) - model->BSIM3pnpeak = 0.0; - if (!model->BSIM3pngateGiven) - model->BSIM3pngate = 0.0; - if (!model->BSIM3pvbmGiven) - model->BSIM3pvbm = 0.0; - if (!model->BSIM3pxtGiven) - model->BSIM3pxt = 0.0; - if (!model->BSIM3pkt1Given) - model->BSIM3pkt1 = 0.0; - if (!model->BSIM3pkt1lGiven) - model->BSIM3pkt1l = 0.0; - if (!model->BSIM3pkt2Given) - model->BSIM3pkt2 = 0.0; - if (!model->BSIM3pk3Given) - model->BSIM3pk3 = 0.0; - if (!model->BSIM3pk3bGiven) - model->BSIM3pk3b = 0.0; - if (!model->BSIM3pw0Given) - model->BSIM3pw0 = 0.0; - if (!model->BSIM3pnlxGiven) - model->BSIM3pnlx = 0.0; - if (!model->BSIM3pdvt0Given) - model->BSIM3pdvt0 = 0.0; - if (!model->BSIM3pdvt1Given) - model->BSIM3pdvt1 = 0.0; - if (!model->BSIM3pdvt2Given) - model->BSIM3pdvt2 = 0.0; - if (!model->BSIM3pdvt0wGiven) - model->BSIM3pdvt0w = 0.0; - if (!model->BSIM3pdvt1wGiven) - model->BSIM3pdvt1w = 0.0; - if (!model->BSIM3pdvt2wGiven) - model->BSIM3pdvt2w = 0.0; - if (!model->BSIM3pdroutGiven) - model->BSIM3pdrout = 0.0; - if (!model->BSIM3pdsubGiven) - model->BSIM3pdsub = 0.0; - if (!model->BSIM3pvth0Given) - model->BSIM3pvth0 = 0.0; - if (!model->BSIM3puaGiven) - model->BSIM3pua = 0.0; - if (!model->BSIM3pua1Given) - model->BSIM3pua1 = 0.0; - if (!model->BSIM3pubGiven) - model->BSIM3pub = 0.0; - if (!model->BSIM3pub1Given) - model->BSIM3pub1 = 0.0; - if (!model->BSIM3pucGiven) - model->BSIM3puc = 0.0; - if (!model->BSIM3puc1Given) - model->BSIM3puc1 = 0.0; - if (!model->BSIM3pu0Given) - model->BSIM3pu0 = 0.0; - if (!model->BSIM3puteGiven) - model->BSIM3pute = 0.0; - if (!model->BSIM3pvoffGiven) - model->BSIM3pvoff = 0.0; - if (!model->BSIM3pdeltaGiven) - model->BSIM3pdelta = 0.0; - if (!model->BSIM3prdswGiven) - model->BSIM3prdsw = 0.0; - if (!model->BSIM3pprwbGiven) - model->BSIM3pprwb = 0.0; - if (!model->BSIM3pprwgGiven) - model->BSIM3pprwg = 0.0; - if (!model->BSIM3pprtGiven) - model->BSIM3pprt = 0.0; - if (!model->BSIM3peta0Given) - model->BSIM3peta0 = 0.0; - if (!model->BSIM3petabGiven) - model->BSIM3petab = 0.0; - if (!model->BSIM3ppclmGiven) - model->BSIM3ppclm = 0.0; - if (!model->BSIM3ppdibl1Given) - model->BSIM3ppdibl1 = 0.0; - if (!model->BSIM3ppdibl2Given) - model->BSIM3ppdibl2 = 0.0; - if (!model->BSIM3ppdiblbGiven) - model->BSIM3ppdiblb = 0.0; - if (!model->BSIM3ppscbe1Given) - model->BSIM3ppscbe1 = 0.0; - if (!model->BSIM3ppscbe2Given) - model->BSIM3ppscbe2 = 0.0; - if (!model->BSIM3ppvagGiven) - model->BSIM3ppvag = 0.0; - if (!model->BSIM3pwrGiven) - model->BSIM3pwr = 0.0; - if (!model->BSIM3pdwgGiven) - model->BSIM3pdwg = 0.0; - if (!model->BSIM3pdwbGiven) - model->BSIM3pdwb = 0.0; - if (!model->BSIM3pb0Given) - model->BSIM3pb0 = 0.0; - if (!model->BSIM3pb1Given) - model->BSIM3pb1 = 0.0; - if (!model->BSIM3palpha0Given) - model->BSIM3palpha0 = 0.0; - if (!model->BSIM3palpha1Given) - model->BSIM3palpha1 = 0.0; - if (!model->BSIM3pbeta0Given) - model->BSIM3pbeta0 = 0.0; - if (!model->BSIM3pvfbGiven) - model->BSIM3pvfb = 0.0; + /* Cross-term dependence */ + if (!model->BSIM3pcdscGiven) + model->BSIM3pcdsc = 0.0; + if (!model->BSIM3pcdscbGiven) + model->BSIM3pcdscb = 0.0; + if (!model->BSIM3pcdscdGiven) + model->BSIM3pcdscd = 0.0; + if (!model->BSIM3pcitGiven) + model->BSIM3pcit = 0.0; + if (!model->BSIM3pnfactorGiven) + model->BSIM3pnfactor = 0.0; + if (!model->BSIM3pxjGiven) + model->BSIM3pxj = 0.0; + if (!model->BSIM3pvsatGiven) + model->BSIM3pvsat = 0.0; + if (!model->BSIM3patGiven) + model->BSIM3pat = 0.0; + if (!model->BSIM3pa0Given) + model->BSIM3pa0 = 0.0; - if (!model->BSIM3pelmGiven) - model->BSIM3pelm = 0.0; - if (!model->BSIM3pcgslGiven) - model->BSIM3pcgsl = 0.0; - if (!model->BSIM3pcgdlGiven) - model->BSIM3pcgdl = 0.0; - if (!model->BSIM3pckappaGiven) - model->BSIM3pckappa = 0.0; - if (!model->BSIM3pcfGiven) - model->BSIM3pcf = 0.0; - if (!model->BSIM3pclcGiven) - model->BSIM3pclc = 0.0; - if (!model->BSIM3pcleGiven) - model->BSIM3pcle = 0.0; - if (!model->BSIM3pvfbcvGiven) - model->BSIM3pvfbcv = 0.0; - if (!model->BSIM3pacdeGiven) - model->BSIM3pacde = 0.0; - if (!model->BSIM3pmoinGiven) - model->BSIM3pmoin = 0.0; - if (!model->BSIM3pnoffGiven) - model->BSIM3pnoff = 0.0; - if (!model->BSIM3pvoffcvGiven) - model->BSIM3pvoffcv = 0.0; + if (!model->BSIM3pagsGiven) + model->BSIM3pags = 0.0; + if (!model->BSIM3pa1Given) + model->BSIM3pa1 = 0.0; + if (!model->BSIM3pa2Given) + model->BSIM3pa2 = 0.0; + if (!model->BSIM3pketaGiven) + model->BSIM3pketa = 0.0; + if (!model->BSIM3pnsubGiven) + model->BSIM3pnsub = 0.0; + if (!model->BSIM3pnpeakGiven) + model->BSIM3pnpeak = 0.0; + if (!model->BSIM3pngateGiven) + model->BSIM3pngate = 0.0; + if (!model->BSIM3pvbmGiven) + model->BSIM3pvbm = 0.0; + if (!model->BSIM3pxtGiven) + model->BSIM3pxt = 0.0; + if (!model->BSIM3pkt1Given) + model->BSIM3pkt1 = 0.0; + if (!model->BSIM3pkt1lGiven) + model->BSIM3pkt1l = 0.0; + if (!model->BSIM3pkt2Given) + model->BSIM3pkt2 = 0.0; + if (!model->BSIM3pk3Given) + model->BSIM3pk3 = 0.0; + if (!model->BSIM3pk3bGiven) + model->BSIM3pk3b = 0.0; + if (!model->BSIM3pw0Given) + model->BSIM3pw0 = 0.0; + if (!model->BSIM3pnlxGiven) + model->BSIM3pnlx = 0.0; + if (!model->BSIM3pdvt0Given) + model->BSIM3pdvt0 = 0.0; + if (!model->BSIM3pdvt1Given) + model->BSIM3pdvt1 = 0.0; + if (!model->BSIM3pdvt2Given) + model->BSIM3pdvt2 = 0.0; + if (!model->BSIM3pdvt0wGiven) + model->BSIM3pdvt0w = 0.0; + if (!model->BSIM3pdvt1wGiven) + model->BSIM3pdvt1w = 0.0; + if (!model->BSIM3pdvt2wGiven) + model->BSIM3pdvt2w = 0.0; + if (!model->BSIM3pdroutGiven) + model->BSIM3pdrout = 0.0; + if (!model->BSIM3pdsubGiven) + model->BSIM3pdsub = 0.0; + if (!model->BSIM3pvth0Given) + model->BSIM3pvth0 = 0.0; + if (!model->BSIM3puaGiven) + model->BSIM3pua = 0.0; + if (!model->BSIM3pua1Given) + model->BSIM3pua1 = 0.0; + if (!model->BSIM3pubGiven) + model->BSIM3pub = 0.0; + if (!model->BSIM3pub1Given) + model->BSIM3pub1 = 0.0; + if (!model->BSIM3pucGiven) + model->BSIM3puc = 0.0; + if (!model->BSIM3puc1Given) + model->BSIM3puc1 = 0.0; + if (!model->BSIM3pu0Given) + model->BSIM3pu0 = 0.0; + if (!model->BSIM3puteGiven) + model->BSIM3pute = 0.0; + if (!model->BSIM3pvoffGiven) + model->BSIM3pvoff = 0.0; + if (!model->BSIM3pdeltaGiven) + model->BSIM3pdelta = 0.0; + if (!model->BSIM3prdswGiven) + model->BSIM3prdsw = 0.0; + if (!model->BSIM3pprwbGiven) + model->BSIM3pprwb = 0.0; + if (!model->BSIM3pprwgGiven) + model->BSIM3pprwg = 0.0; + if (!model->BSIM3pprtGiven) + model->BSIM3pprt = 0.0; + if (!model->BSIM3peta0Given) + model->BSIM3peta0 = 0.0; + if (!model->BSIM3petabGiven) + model->BSIM3petab = 0.0; + if (!model->BSIM3ppclmGiven) + model->BSIM3ppclm = 0.0; + if (!model->BSIM3ppdibl1Given) + model->BSIM3ppdibl1 = 0.0; + if (!model->BSIM3ppdibl2Given) + model->BSIM3ppdibl2 = 0.0; + if (!model->BSIM3ppdiblbGiven) + model->BSIM3ppdiblb = 0.0; + if (!model->BSIM3ppscbe1Given) + model->BSIM3ppscbe1 = 0.0; + if (!model->BSIM3ppscbe2Given) + model->BSIM3ppscbe2 = 0.0; + if (!model->BSIM3ppvagGiven) + model->BSIM3ppvag = 0.0; + if (!model->BSIM3pwrGiven) + model->BSIM3pwr = 0.0; + if (!model->BSIM3pdwgGiven) + model->BSIM3pdwg = 0.0; + if (!model->BSIM3pdwbGiven) + model->BSIM3pdwb = 0.0; + if (!model->BSIM3pb0Given) + model->BSIM3pb0 = 0.0; + if (!model->BSIM3pb1Given) + model->BSIM3pb1 = 0.0; + if (!model->BSIM3palpha0Given) + model->BSIM3palpha0 = 0.0; + if (!model->BSIM3palpha1Given) + model->BSIM3palpha1 = 0.0; + if (!model->BSIM3pbeta0Given) + model->BSIM3pbeta0 = 0.0; + if (!model->BSIM3pvfbGiven) + model->BSIM3pvfb = 0.0; - /* unit degree celcius */ - if (!model->BSIM3tnomGiven) - model->BSIM3tnom = ckt->CKTnomTemp; - else - model->BSIM3tnom = model->BSIM3tnom + 273.15; - if (!model->BSIM3LintGiven) - model->BSIM3Lint = 0.0; - if (!model->BSIM3LlGiven) - model->BSIM3Ll = 0.0; - if (!model->BSIM3LlcGiven) - model->BSIM3Llc = model->BSIM3Ll; - if (!model->BSIM3LlnGiven) - model->BSIM3Lln = 1.0; - if (!model->BSIM3LwGiven) - model->BSIM3Lw = 0.0; - if (!model->BSIM3LwcGiven) - model->BSIM3Lwc = model->BSIM3Lw; - if (!model->BSIM3LwnGiven) - model->BSIM3Lwn = 1.0; - if (!model->BSIM3LwlGiven) - model->BSIM3Lwl = 0.0; - if (!model->BSIM3LwlcGiven) - model->BSIM3Lwlc = model->BSIM3Lwl; - if (!model->BSIM3LminGiven) - model->BSIM3Lmin = 0.0; - if (!model->BSIM3LmaxGiven) - model->BSIM3Lmax = 1.0; - if (!model->BSIM3WintGiven) - model->BSIM3Wint = 0.0; - if (!model->BSIM3WlGiven) - model->BSIM3Wl = 0.0; - if (!model->BSIM3WlcGiven) - model->BSIM3Wlc = model->BSIM3Wl; - if (!model->BSIM3WlnGiven) - model->BSIM3Wln = 1.0; - if (!model->BSIM3WwGiven) - model->BSIM3Ww = 0.0; - if (!model->BSIM3WwcGiven) - model->BSIM3Wwc = model->BSIM3Ww; - if (!model->BSIM3WwnGiven) - model->BSIM3Wwn = 1.0; - if (!model->BSIM3WwlGiven) - model->BSIM3Wwl = 0.0; - if (!model->BSIM3WwlcGiven) - model->BSIM3Wwlc = model->BSIM3Wwl; - if (!model->BSIM3WminGiven) - model->BSIM3Wmin = 0.0; - if (!model->BSIM3WmaxGiven) - model->BSIM3Wmax = 1.0; - if (!model->BSIM3dwcGiven) - model->BSIM3dwc = model->BSIM3Wint; - if (!model->BSIM3dlcGiven) - model->BSIM3dlc = model->BSIM3Lint; - if (!model->BSIM3cfGiven) - model->BSIM3cf = 2.0 * EPSOX / M_PI - * log(1.0 + 0.4e-6 / model->BSIM3tox); - if (!model->BSIM3cgdoGiven) - { if (model->BSIM3dlcGiven && (model->BSIM3dlc > 0.0)) - { model->BSIM3cgdo = model->BSIM3dlc * model->BSIM3cox - - model->BSIM3cgdl ; - } - else - model->BSIM3cgdo = 0.6 * model->BSIM3xj * model->BSIM3cox; - } - if (!model->BSIM3cgsoGiven) - { if (model->BSIM3dlcGiven && (model->BSIM3dlc > 0.0)) - { model->BSIM3cgso = model->BSIM3dlc * model->BSIM3cox - - model->BSIM3cgsl ; - } - else - model->BSIM3cgso = 0.6 * model->BSIM3xj * model->BSIM3cox; - } + if (!model->BSIM3pelmGiven) + model->BSIM3pelm = 0.0; + if (!model->BSIM3pcgslGiven) + model->BSIM3pcgsl = 0.0; + if (!model->BSIM3pcgdlGiven) + model->BSIM3pcgdl = 0.0; + if (!model->BSIM3pckappaGiven) + model->BSIM3pckappa = 0.0; + if (!model->BSIM3pcfGiven) + model->BSIM3pcf = 0.0; + if (!model->BSIM3pclcGiven) + model->BSIM3pclc = 0.0; + if (!model->BSIM3pcleGiven) + model->BSIM3pcle = 0.0; + if (!model->BSIM3pvfbcvGiven) + model->BSIM3pvfbcv = 0.0; + if (!model->BSIM3pacdeGiven) + model->BSIM3pacde = 0.0; + if (!model->BSIM3pmoinGiven) + model->BSIM3pmoin = 0.0; + if (!model->BSIM3pnoffGiven) + model->BSIM3pnoff = 0.0; + if (!model->BSIM3pvoffcvGiven) + model->BSIM3pvoffcv = 0.0; - if (!model->BSIM3cgboGiven) - { model->BSIM3cgbo = 2.0 * model->BSIM3dwc * model->BSIM3cox; - } - if (!model->BSIM3xpartGiven) - model->BSIM3xpart = 0.0; - if (!model->BSIM3sheetResistanceGiven) - model->BSIM3sheetResistance = 0.0; - if (!model->BSIM3unitAreaJctCapGiven) - model->BSIM3unitAreaJctCap = 5.0E-4; - if (!model->BSIM3unitLengthSidewallJctCapGiven) - model->BSIM3unitLengthSidewallJctCap = 5.0E-10; - if (!model->BSIM3unitLengthGateSidewallJctCapGiven) - model->BSIM3unitLengthGateSidewallJctCap = model->BSIM3unitLengthSidewallJctCap ; - if (!model->BSIM3jctSatCurDensityGiven) - model->BSIM3jctSatCurDensity = 1.0E-4; - if (!model->BSIM3jctSidewallSatCurDensityGiven) - model->BSIM3jctSidewallSatCurDensity = 0.0; - if (!model->BSIM3bulkJctPotentialGiven) - model->BSIM3bulkJctPotential = 1.0; - if (!model->BSIM3sidewallJctPotentialGiven) - model->BSIM3sidewallJctPotential = 1.0; - if (!model->BSIM3GatesidewallJctPotentialGiven) - model->BSIM3GatesidewallJctPotential = model->BSIM3sidewallJctPotential; - if (!model->BSIM3bulkJctBotGradingCoeffGiven) - model->BSIM3bulkJctBotGradingCoeff = 0.5; - if (!model->BSIM3bulkJctSideGradingCoeffGiven) - model->BSIM3bulkJctSideGradingCoeff = 0.33; - if (!model->BSIM3bulkJctGateSideGradingCoeffGiven) - model->BSIM3bulkJctGateSideGradingCoeff = model->BSIM3bulkJctSideGradingCoeff; - if (!model->BSIM3jctEmissionCoeffGiven) - model->BSIM3jctEmissionCoeff = 1.0; - if (!model->BSIM3jctTempExponentGiven) - model->BSIM3jctTempExponent = 3.0; - if (!model->BSIM3oxideTrapDensityAGiven) - { if (model->BSIM3type == NMOS) - model->BSIM3oxideTrapDensityA = 1e20; - else - model->BSIM3oxideTrapDensityA=9.9e18; - } - if (!model->BSIM3oxideTrapDensityBGiven) - { if (model->BSIM3type == NMOS) - model->BSIM3oxideTrapDensityB = 5e4; - else - model->BSIM3oxideTrapDensityB = 2.4e3; - } - if (!model->BSIM3oxideTrapDensityCGiven) - { if (model->BSIM3type == NMOS) - model->BSIM3oxideTrapDensityC = -1.4e-12; - else - model->BSIM3oxideTrapDensityC = 1.4e-12; - - } - if (!model->BSIM3emGiven) - model->BSIM3em = 4.1e7; /* V/m */ - if (!model->BSIM3efGiven) - model->BSIM3ef = 1.0; - if (!model->BSIM3afGiven) - model->BSIM3af = 1.0; - if (!model->BSIM3kfGiven) - model->BSIM3kf = 0.0; - /* loop through all the instances of the model */ - for (here = model->BSIM3instances; here != NULL ; - here=here->BSIM3nextInstance) - { - if (here->BSIM3owner == ARCHme) { - /* allocate a chunk of the state vector */ - - here->BSIM3states = *states; - *states += BSIM3numStates; - } - - /* perform the parameter defaulting */ - if (!here->BSIM3drainAreaGiven) - here->BSIM3drainArea = 0.0; - if (!here->BSIM3drainPerimeterGiven) - here->BSIM3drainPerimeter = 0.0; - if (!here->BSIM3drainSquaresGiven) - here->BSIM3drainSquares = 1.0; - if (!here->BSIM3icVBSGiven) - here->BSIM3icVBS = 0.0; - if (!here->BSIM3icVDSGiven) - here->BSIM3icVDS = 0.0; - if (!here->BSIM3icVGSGiven) - here->BSIM3icVGS = 0.0; - if (!here->BSIM3lGiven) - here->BSIM3l = 5.0e-6; - if (!here->BSIM3sourceAreaGiven) - here->BSIM3sourceArea = 0.0; - if (!here->BSIM3sourcePerimeterGiven) - here->BSIM3sourcePerimeter = 0.0; - if (!here->BSIM3sourceSquaresGiven) - here->BSIM3sourceSquares = 1.0; - if (!here->BSIM3wGiven) - here->BSIM3w = 5.0e-6; - if (!here->BSIM3nqsModGiven) - here->BSIM3nqsMod = 0; - - if (!here->BSIM3mGiven) - here->BSIM3m = 1; - - /* process drain series resistance */ - if ((model->BSIM3sheetResistance > 0.0) && - (here->BSIM3drainSquares > 0.0 ) && - (here->BSIM3dNodePrime == 0)) + /* unit degree celcius */ + if (!model->BSIM3tnomGiven) + model->BSIM3tnom = ckt->CKTnomTemp; + /* else + model->BSIM3tnom = model->BSIM3tnom + 273.15; */ + if (!model->BSIM3LintGiven) + model->BSIM3Lint = 0.0; + if (!model->BSIM3LlGiven) + model->BSIM3Ll = 0.0; + if (!model->BSIM3LlcGiven) + model->BSIM3Llc = model->BSIM3Ll; + if (!model->BSIM3LlnGiven) + model->BSIM3Lln = 1.0; + if (!model->BSIM3LwGiven) + model->BSIM3Lw = 0.0; + if (!model->BSIM3LwcGiven) + model->BSIM3Lwc = model->BSIM3Lw; + if (!model->BSIM3LwnGiven) + model->BSIM3Lwn = 1.0; + if (!model->BSIM3LwlGiven) + model->BSIM3Lwl = 0.0; + if (!model->BSIM3LwlcGiven) + model->BSIM3Lwlc = model->BSIM3Lwl; + if (!model->BSIM3LminGiven) + model->BSIM3Lmin = 0.0; + if (!model->BSIM3LmaxGiven) + model->BSIM3Lmax = 1.0; + if (!model->BSIM3WintGiven) + model->BSIM3Wint = 0.0; + if (!model->BSIM3WlGiven) + model->BSIM3Wl = 0.0; + if (!model->BSIM3WlcGiven) + model->BSIM3Wlc = model->BSIM3Wl; + if (!model->BSIM3WlnGiven) + model->BSIM3Wln = 1.0; + if (!model->BSIM3WwGiven) + model->BSIM3Ww = 0.0; + if (!model->BSIM3WwcGiven) + model->BSIM3Wwc = model->BSIM3Ww; + if (!model->BSIM3WwnGiven) + model->BSIM3Wwn = 1.0; + if (!model->BSIM3WwlGiven) + model->BSIM3Wwl = 0.0; + if (!model->BSIM3WwlcGiven) + model->BSIM3Wwlc = model->BSIM3Wwl; + if (!model->BSIM3WminGiven) + model->BSIM3Wmin = 0.0; + if (!model->BSIM3WmaxGiven) + model->BSIM3Wmax = 1.0; + if (!model->BSIM3dwcGiven) + model->BSIM3dwc = model->BSIM3Wint; + if (!model->BSIM3dlcGiven) + model->BSIM3dlc = model->BSIM3Lint; + if (!model->BSIM3cfGiven) + model->BSIM3cf = 2.0 * EPSOX / M_PI + * log (1.0 + 0.4e-6 / model->BSIM3tox); + if (!model->BSIM3cgdoGiven) + { + if (model->BSIM3dlcGiven && (model->BSIM3dlc > 0.0)) { - error = CKTmkVolt(ckt,&tmp,here->BSIM3name,"drain"); - if(error) return(error); - here->BSIM3dNodePrime = tmp->number; - if (ckt->CKTcopyNodesets) { - CKTnode *tmpNode; - IFuid tmpName; - - if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) { - if (tmpNode->nsGiven) { - tmp->nodeset=tmpNode->nodeset; - tmp->nsGiven=tmpNode->nsGiven; - } - } - } - } - else - { here->BSIM3dNodePrime = here->BSIM3dNode; - } - - /* process source series resistance */ - if ((model->BSIM3sheetResistance > 0.0) && - (here->BSIM3sourceSquares > 0.0 ) && - (here->BSIM3sNodePrime == 0)) - { error = CKTmkVolt(ckt,&tmp,here->BSIM3name,"source"); - if(error) return(error); - here->BSIM3sNodePrime = tmp->number; - if (ckt->CKTcopyNodesets) { - CKTnode *tmpNode; - IFuid tmpName; + model->BSIM3cgdo = model->BSIM3dlc * model->BSIM3cox + - model->BSIM3cgdl; + } + else + model->BSIM3cgdo = 0.6 * model->BSIM3xj * model->BSIM3cox; + } + if (!model->BSIM3cgsoGiven) + { + if (model->BSIM3dlcGiven && (model->BSIM3dlc > 0.0)) + { + model->BSIM3cgso = model->BSIM3dlc * model->BSIM3cox + - model->BSIM3cgsl; + } + else + model->BSIM3cgso = 0.6 * model->BSIM3xj * model->BSIM3cox; + } - if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) { - if (tmpNode->nsGiven) { - tmp->nodeset=tmpNode->nodeset; - tmp->nsGiven=tmpNode->nsGiven; - } - } - } - } - else - { here->BSIM3sNodePrime = here->BSIM3sNode; - } + if (!model->BSIM3cgboGiven) + { + model->BSIM3cgbo = 2.0 * model->BSIM3dwc * model->BSIM3cox; + } + if (!model->BSIM3xpartGiven) + model->BSIM3xpart = 0.0; + if (!model->BSIM3sheetResistanceGiven) + model->BSIM3sheetResistance = 0.0; + if (!model->BSIM3unitAreaJctCapGiven) + model->BSIM3unitAreaJctCap = 5.0E-4; + if (!model->BSIM3unitLengthSidewallJctCapGiven) + model->BSIM3unitLengthSidewallJctCap = 5.0E-10; + if (!model->BSIM3unitLengthGateSidewallJctCapGiven) + model->BSIM3unitLengthGateSidewallJctCap = + model->BSIM3unitLengthSidewallJctCap; + if (!model->BSIM3jctSatCurDensityGiven) + model->BSIM3jctSatCurDensity = 1.0E-4; + if (!model->BSIM3jctSidewallSatCurDensityGiven) + model->BSIM3jctSidewallSatCurDensity = 0.0; + if (!model->BSIM3bulkJctPotentialGiven) + model->BSIM3bulkJctPotential = 1.0; + if (!model->BSIM3sidewallJctPotentialGiven) + model->BSIM3sidewallJctPotential = 1.0; + if (!model->BSIM3GatesidewallJctPotentialGiven) + model->BSIM3GatesidewallJctPotential = + model->BSIM3sidewallJctPotential; + if (!model->BSIM3bulkJctBotGradingCoeffGiven) + model->BSIM3bulkJctBotGradingCoeff = 0.5; + if (!model->BSIM3bulkJctSideGradingCoeffGiven) + model->BSIM3bulkJctSideGradingCoeff = 0.33; + if (!model->BSIM3bulkJctGateSideGradingCoeffGiven) + model->BSIM3bulkJctGateSideGradingCoeff = + model->BSIM3bulkJctSideGradingCoeff; + if (!model->BSIM3jctEmissionCoeffGiven) + model->BSIM3jctEmissionCoeff = 1.0; + if (!model->BSIM3jctTempExponentGiven) + model->BSIM3jctTempExponent = 3.0; + if (!model->BSIM3oxideTrapDensityAGiven) + { + if (model->BSIM3type == NMOS) + model->BSIM3oxideTrapDensityA = 1e20; + else + model->BSIM3oxideTrapDensityA = 9.9e18; + } + if (!model->BSIM3oxideTrapDensityBGiven) + { + if (model->BSIM3type == NMOS) + model->BSIM3oxideTrapDensityB = 5e4; + else + model->BSIM3oxideTrapDensityB = 2.4e3; + } + if (!model->BSIM3oxideTrapDensityCGiven) + { + if (model->BSIM3type == NMOS) + model->BSIM3oxideTrapDensityC = -1.4e-12; + else + model->BSIM3oxideTrapDensityC = 1.4e-12; - /* internal charge node */ - - if ((here->BSIM3nqsMod) && (here->BSIM3qNode == 0)) - { error = CKTmkVolt(ckt,&tmp,here->BSIM3name,"charge"); - if(error) return(error); - here->BSIM3qNode = tmp->number; - } - else - { here->BSIM3qNode = 0; - } + } + if (!model->BSIM3emGiven) + model->BSIM3em = 4.1e7; /* V/m */ + if (!model->BSIM3efGiven) + model->BSIM3ef = 1.0; + if (!model->BSIM3afGiven) + model->BSIM3af = 1.0; + if (!model->BSIM3kfGiven) + model->BSIM3kf = 0.0; + /* loop through all the instances of the model */ + for (here = model->BSIM3instances; here != NULL; + here = here->BSIM3nextInstance) + { + if (here->BSIM3owner == ARCHme) + { + /* allocate a chunk of the state vector */ - /* set Sparse Matrix Pointers */ + here->BSIM3states = *states; + *states += BSIM3numStates; + } + + /* perform the parameter defaulting */ + if (!here->BSIM3drainAreaGiven) + here->BSIM3drainArea = 0.0; + if (!here->BSIM3drainPerimeterGiven) + here->BSIM3drainPerimeter = 0.0; + if (!here->BSIM3drainSquaresGiven) + here->BSIM3drainSquares = 1.0; + if (!here->BSIM3icVBSGiven) + here->BSIM3icVBS = 0.0; + if (!here->BSIM3icVDSGiven) + here->BSIM3icVDS = 0.0; + if (!here->BSIM3icVGSGiven) + here->BSIM3icVGS = 0.0; + if (!here->BSIM3lGiven) + here->BSIM3l = 5.0e-6; + if (!here->BSIM3sourceAreaGiven) + here->BSIM3sourceArea = 0.0; + if (!here->BSIM3sourcePerimeterGiven) + here->BSIM3sourcePerimeter = 0.0; + if (!here->BSIM3sourceSquaresGiven) + here->BSIM3sourceSquares = 1.0; + if (!here->BSIM3wGiven) + here->BSIM3w = 5.0e-6; + if (!here->BSIM3nqsModGiven) + here->BSIM3nqsMod = 0; + + if (!here->BSIM3mGiven) + here->BSIM3m = 1; + + /* process drain series resistance */ + if ((model->BSIM3sheetResistance > 0.0) && + (here->BSIM3drainSquares > 0.0) && (here->BSIM3dNodePrime == 0)) + { + error = CKTmkVolt (ckt, &tmp, here->BSIM3name, "drain"); + if (error) + return (error); + here->BSIM3dNodePrime = tmp->number; + if (ckt->CKTcopyNodesets) + { + CKTnode *tmpNode; + IFuid tmpName; + + if (CKTinst2Node (ckt, here, 1, &tmpNode, &tmpName) == OK) + { + if (tmpNode->nsGiven) + { + tmp->nodeset = tmpNode->nodeset; + tmp->nsGiven = tmpNode->nsGiven; + } + } + } + } + else + { + here->BSIM3dNodePrime = here->BSIM3dNode; + } + + /* process source series resistance */ + if ((model->BSIM3sheetResistance > 0.0) && + (here->BSIM3sourceSquares > 0.0) && + (here->BSIM3sNodePrime == 0)) + { + error = CKTmkVolt (ckt, &tmp, here->BSIM3name, "source"); + if (error) + return (error); + here->BSIM3sNodePrime = tmp->number; + if (ckt->CKTcopyNodesets) + { + CKTnode *tmpNode; + IFuid tmpName; + + if (CKTinst2Node (ckt, here, 3, &tmpNode, &tmpName) == OK) + { + if (tmpNode->nsGiven) + { + tmp->nodeset = tmpNode->nodeset; + tmp->nsGiven = tmpNode->nsGiven; + } + } + } + } + else + { + here->BSIM3sNodePrime = here->BSIM3sNode; + } + + /* internal charge node */ + + if ((here->BSIM3nqsMod) && (here->BSIM3qNode == 0)) + { + error = CKTmkVolt (ckt, &tmp, here->BSIM3name, "charge"); + if (error) + return (error); + here->BSIM3qNode = tmp->number; + } + else + { + here->BSIM3qNode = 0; + } + + /* set Sparse Matrix Pointers */ /* macro to make elements with built in test for out of memory */ #define TSTALLOC(ptr,first,second) \ @@ -950,75 +975,70 @@ if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\ return(E_NOMEM);\ } - TSTALLOC(BSIM3DdPtr, BSIM3dNode, BSIM3dNode) - TSTALLOC(BSIM3GgPtr, BSIM3gNode, BSIM3gNode) - TSTALLOC(BSIM3SsPtr, BSIM3sNode, BSIM3sNode) - TSTALLOC(BSIM3BbPtr, BSIM3bNode, BSIM3bNode) - TSTALLOC(BSIM3DPdpPtr, BSIM3dNodePrime, BSIM3dNodePrime) - TSTALLOC(BSIM3SPspPtr, BSIM3sNodePrime, BSIM3sNodePrime) - TSTALLOC(BSIM3DdpPtr, BSIM3dNode, BSIM3dNodePrime) - TSTALLOC(BSIM3GbPtr, BSIM3gNode, BSIM3bNode) - TSTALLOC(BSIM3GdpPtr, BSIM3gNode, BSIM3dNodePrime) - TSTALLOC(BSIM3GspPtr, BSIM3gNode, BSIM3sNodePrime) - TSTALLOC(BSIM3SspPtr, BSIM3sNode, BSIM3sNodePrime) - TSTALLOC(BSIM3BdpPtr, BSIM3bNode, BSIM3dNodePrime) - TSTALLOC(BSIM3BspPtr, BSIM3bNode, BSIM3sNodePrime) - TSTALLOC(BSIM3DPspPtr, BSIM3dNodePrime, BSIM3sNodePrime) - TSTALLOC(BSIM3DPdPtr, BSIM3dNodePrime, BSIM3dNode) - TSTALLOC(BSIM3BgPtr, BSIM3bNode, BSIM3gNode) - TSTALLOC(BSIM3DPgPtr, BSIM3dNodePrime, BSIM3gNode) - TSTALLOC(BSIM3SPgPtr, BSIM3sNodePrime, BSIM3gNode) - TSTALLOC(BSIM3SPsPtr, BSIM3sNodePrime, BSIM3sNode) - TSTALLOC(BSIM3DPbPtr, BSIM3dNodePrime, BSIM3bNode) - TSTALLOC(BSIM3SPbPtr, BSIM3sNodePrime, BSIM3bNode) - TSTALLOC(BSIM3SPdpPtr, BSIM3sNodePrime, BSIM3dNodePrime) - - TSTALLOC(BSIM3QqPtr, BSIM3qNode, BSIM3qNode) - - TSTALLOC(BSIM3QdpPtr, BSIM3qNode, BSIM3dNodePrime) - TSTALLOC(BSIM3QspPtr, BSIM3qNode, BSIM3sNodePrime) - TSTALLOC(BSIM3QgPtr, BSIM3qNode, BSIM3gNode) - TSTALLOC(BSIM3QbPtr, BSIM3qNode, BSIM3bNode) - TSTALLOC(BSIM3DPqPtr, BSIM3dNodePrime, BSIM3qNode) - TSTALLOC(BSIM3SPqPtr, BSIM3sNodePrime, BSIM3qNode) - TSTALLOC(BSIM3GqPtr, BSIM3gNode, BSIM3qNode) - TSTALLOC(BSIM3BqPtr, BSIM3bNode, BSIM3qNode) - - } + TSTALLOC (BSIM3DdPtr, BSIM3dNode, BSIM3dNode) + TSTALLOC (BSIM3GgPtr, BSIM3gNode, BSIM3gNode) + TSTALLOC (BSIM3SsPtr, BSIM3sNode, BSIM3sNode) + TSTALLOC (BSIM3BbPtr, BSIM3bNode, BSIM3bNode) + TSTALLOC (BSIM3DPdpPtr, BSIM3dNodePrime, BSIM3dNodePrime) + TSTALLOC (BSIM3SPspPtr, BSIM3sNodePrime, BSIM3sNodePrime) + TSTALLOC (BSIM3DdpPtr, BSIM3dNode, BSIM3dNodePrime) + TSTALLOC (BSIM3GbPtr, BSIM3gNode, BSIM3bNode) + TSTALLOC (BSIM3GdpPtr, BSIM3gNode, BSIM3dNodePrime) + TSTALLOC (BSIM3GspPtr, BSIM3gNode, BSIM3sNodePrime) + TSTALLOC (BSIM3SspPtr, BSIM3sNode, BSIM3sNodePrime) + TSTALLOC (BSIM3BdpPtr, BSIM3bNode, BSIM3dNodePrime) + TSTALLOC (BSIM3BspPtr, BSIM3bNode, BSIM3sNodePrime) + TSTALLOC (BSIM3DPspPtr, BSIM3dNodePrime, BSIM3sNodePrime) + TSTALLOC (BSIM3DPdPtr, BSIM3dNodePrime, BSIM3dNode) + TSTALLOC (BSIM3BgPtr, BSIM3bNode, BSIM3gNode) + TSTALLOC (BSIM3DPgPtr, BSIM3dNodePrime, BSIM3gNode) + TSTALLOC (BSIM3SPgPtr, BSIM3sNodePrime, BSIM3gNode) + TSTALLOC (BSIM3SPsPtr, BSIM3sNodePrime, BSIM3sNode) + TSTALLOC (BSIM3DPbPtr, BSIM3dNodePrime, BSIM3bNode) + TSTALLOC (BSIM3SPbPtr, BSIM3sNodePrime, BSIM3bNode) + TSTALLOC (BSIM3SPdpPtr, BSIM3sNodePrime, BSIM3dNodePrime) + TSTALLOC (BSIM3QqPtr, BSIM3qNode, BSIM3qNode) + TSTALLOC (BSIM3QdpPtr, BSIM3qNode, BSIM3dNodePrime) + TSTALLOC (BSIM3QspPtr, BSIM3qNode, BSIM3sNodePrime) + TSTALLOC (BSIM3QgPtr, BSIM3qNode, BSIM3gNode) + TSTALLOC (BSIM3QbPtr, BSIM3qNode, BSIM3bNode) + TSTALLOC (BSIM3DPqPtr, BSIM3dNodePrime, BSIM3qNode) + TSTALLOC (BSIM3SPqPtr, BSIM3sNodePrime, BSIM3qNode) + TSTALLOC (BSIM3GqPtr, BSIM3gNode, BSIM3qNode) + TSTALLOC (BSIM3BqPtr, BSIM3bNode, BSIM3qNode)} } - return(OK); -} + return (OK); +} int -BSIM3unsetup(inModel,ckt) - GENmodel *inModel; - CKTcircuit *ckt; +BSIM3unsetup (inModel, ckt) + GENmodel *inModel; + CKTcircuit *ckt; { - BSIM3model *model; - BSIM3instance *here; + BSIM3model *model; + BSIM3instance *here; - for (model = (BSIM3model *)inModel; model != NULL; - model = model->BSIM3nextModel) + for (model = (BSIM3model *) inModel; model != NULL; + model = model->BSIM3nextModel) { - for (here = model->BSIM3instances; here != NULL; - here=here->BSIM3nextInstance) + for (here = model->BSIM3instances; here != NULL; + here = here->BSIM3nextInstance) { - if (here->BSIM3dNodePrime - && here->BSIM3dNodePrime != here->BSIM3dNode) + if (here->BSIM3dNodePrime + && here->BSIM3dNodePrime != here->BSIM3dNode) { - CKTdltNNum(ckt, here->BSIM3dNodePrime); - here->BSIM3dNodePrime = 0; + CKTdltNNum (ckt, here->BSIM3dNodePrime); + here->BSIM3dNodePrime = 0; } - if (here->BSIM3sNodePrime - && here->BSIM3sNodePrime != here->BSIM3sNode) + if (here->BSIM3sNodePrime + && here->BSIM3sNodePrime != here->BSIM3sNode) { - CKTdltNNum(ckt, here->BSIM3sNodePrime); - here->BSIM3sNodePrime = 0; + CKTdltNNum (ckt, here->BSIM3sNodePrime); + here->BSIM3sNodePrime = 0; } } } - return OK; + return OK; } -