You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2882 lines
109 KiB

/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
/**********
* Copyright 2010 Regents of the University of California. All rights reserved.
* Authors: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soiset.c
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
* Authors: 2009- Tanvir Morshed, Ali Niknejad, Chenming Hu.
* File: b4soiset.c
* Modified by Hui Wan, Xuemei Xi 11/30/2005
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
* Modified by Tanvir Morshed 09/22/2009
* Modified by Tanvir Morshed 12/31/2009
* Modified by Tanvir Morshed 04/27/2010
* Modified by Tanvir Morshed 12/16/2010
**********/
#include "ngspice/ngspice.h"
#include "ngspice/smpdefs.h"
#include "ngspice/cktdefs.h"
#include "b4soidef.h"
#include "ngspice/const.h"
#include "ngspice/sperror.h"
#include "ngspice/suffix.h"
#define SMOOTHFACTOR 0.1
#define EPSOX 3.453133e-11
#define EPSSI 1.03594e-10
#define PI 3.141592654
#define Charge_q 1.60219e-19
#define Meter2Micron 1.0e6
#define EPS0 8.85418e-12
double epsrox, toxe, epssub;
double NchMax; /* v4.4 */
int
B4SOIsetup(
SMPmatrix *matrix,
GENmodel *inModel,
CKTcircuit *ckt,
int *states)
{
register B4SOImodel *model = (B4SOImodel*)inModel;
register B4SOIinstance *here;
int error;
CKTnode *tmp;
double Cboxt;
/* v3.2 */
double Vbs0t, Qsi;
#ifdef USE_OMP
int idx, InstCount;
B4SOIinstance **InstArray;
#endif
/* loop through all the B4SOI device models */
for( ; model != NULL; model = model->B4SOInextModel )
{
/* Default value Processing for B4SOI MOSFET Models */
if (!model->B4SOItypeGiven)
model->B4SOItype = NMOS;
if (!model->B4SOImobModGiven)
model->B4SOImobMod = 1;
if (!model->B4SOIbinUnitGiven)
model->B4SOIbinUnit = 1;
if (!model->B4SOIparamChkGiven)
model->B4SOIparamChk = 0;
if (!model->B4SOIcapModGiven)
model->B4SOIcapMod = 2;
if (!model->B4SOIiiiModGiven) /* Bug fix #7 Jun 09 'iiimod' with default value added */
model->B4SOIiiiMod = 0;
if (!model->B4SOImtrlModGiven)
model->B4SOImtrlMod = 0; /*4.1*/
if (!model->B4SOIvgstcvModGiven)
/*model->B4SOIvgstcvMod = 0; v4.2 Bugfix */
model->B4SOIvgstcvMod = 1;
if (!model->B4SOIgidlModGiven)
model->B4SOIgidlMod = 0;
if (!model->B4SOIeotGiven)
model->B4SOIeot = 100.0e-10;
if (!model->B4SOIepsroxGiven)
model->B4SOIepsrox = 3.9;
if (!model->B4SOIepsrsubGiven)
model->B4SOIepsrsub = 11.7;
if (!model->B4SOIni0subGiven)
model->B4SOIni0sub = 1.45e10; /* unit 1/cm3 */
if (!model->B4SOIbg0subGiven)
model->B4SOIbg0sub = 1.16; /* unit eV */
if (!model->B4SOItbgasubGiven)
model->B4SOItbgasub = 7.02e-4;
if (!model->B4SOItbgbsubGiven)
model->B4SOItbgbsub = 1108.0;
if (!model->B4SOIleffeotGiven)
model->B4SOIleffeot = 1.0;
if (!model->B4SOIweffeotGiven)
model->B4SOIweffeot = 10.0;
if (!model->B4SOIvddeotGiven)
model->B4SOIvddeot = (model->B4SOItype == NMOS) ? 1.5 : -1.5;
if (!model->B4SOItempeotGiven)
model->B4SOItempeot = 300.15;
if (!model->B4SOIadosGiven)
model->B4SOIados = 1.0;
if (!model->B4SOIbdosGiven)
model->B4SOIbdos = 1.0;
if (!model->B4SOIepsrgateGiven)
model->B4SOIepsrgate = 11.7;
if (!model->B4SOIphigGiven)
model->B4SOIphig = 4.05;
if (!model->B4SOIeasubGiven)
model->B4SOIeasub = 4.05;
/* if (!model->B4SOInoiModGiven)
model->B4SOInoiMod = 1; v3.2 */
if (!model->B4SOIshModGiven)
model->B4SOIshMod = 0;
if (!model->B4SOIversionGiven)
model->B4SOIversion = 4.4;
if (!model->B4SOItoxGiven)
model->B4SOItox = 100.0e-10;
/*model->B4SOIcox = 3.453133e-11 / model->B4SOItox;*/
if(model->B4SOImtrlMod)
{
epsrox = 3.9;
toxe = model->B4SOIeot;
epssub = EPS0 * model->B4SOIepsrsub;
/*model->B4SOIcox = 3.453133e-11 / model->B4SOItox;*/
model->B4SOIcox = epsrox * EPS0 / toxe;
}
else
{
epsrox = model->B4SOIepsrox;
toxe = model->B4SOItox;
epssub = EPSSI;
/*model->B4SOIcox = epsrox * EPS0 / toxe;*/
model->B4SOIcox = 3.453133e-11 / model->B4SOItox;
}
if (!model->B4SOItoxpGiven)
model->B4SOItoxp = model->B4SOItox;
if (!model->B4SOItoxmGiven)
model->B4SOItoxm = model->B4SOItox; /* v3.2 */
/* v3.2 */
if (!model->B4SOIsoiModGiven)
model->B4SOIsoiMod = 0;
else if ((model->B4SOIsoiMod != 0) && (model->B4SOIsoiMod != 1)
&& (model->B4SOIsoiMod != 2) && (model->B4SOIsoiMod != 3))
{ model->B4SOIsoiMod = 0;
printf("Warning: soiMod has been set to its default value: 0.\n");
}
/* v3.1 added for RF */
if (!model->B4SOIrgateModGiven)
model->B4SOIrgateMod = 0;
else if ((model->B4SOIrgateMod != 0) && (model->B4SOIrgateMod != 1)
&& (model->B4SOIrgateMod != 2) && (model->B4SOIrgateMod != 3))
{ model->B4SOIrgateMod = 0;
printf("Warning: rgateMod has been set to its default value: 0.\n");
}
/* v3.1 added for RF end */
/* v3.2 for noise */
if (!model->B4SOIfnoiModGiven)
model->B4SOIfnoiMod = 1;
else if ((model->B4SOIfnoiMod != 0) && (model->B4SOIfnoiMod != 1))
{ model->B4SOIfnoiMod = 1;
printf("Waring: fnoiMod has been set to default value:1.\n");
}
if (!model->B4SOItnoiModGiven)
model->B4SOItnoiMod = 0;
else if ((model->B4SOItnoiMod != 0) && (model->B4SOItnoiMod != 1)&& (model->B4SOItnoiMod != 2))
{ model->B4SOItnoiMod = 0;
printf("Waring: tnoiMod has been set to default value:0.\n");
}
if (!model->B4SOItnoiaGiven)
model->B4SOItnoia = 1.5;
if (!model->B4SOItnoibGiven)
model->B4SOItnoib = 3.5;
if (!model->B4SOIrnoiaGiven)
model->B4SOIrnoia = 0.577;
if (!model->B4SOIrnoibGiven)
model->B4SOIrnoib = 0.37;
if (!model->B4SOIntnoiGiven)
model->B4SOIntnoi = 1.0;
/* v3.2 for noise end */
/* v4.0 */
if (!model->B4SOIrdsModGiven)
model->B4SOIrdsMod = 0;
else if ((model->B4SOIrdsMod != 0) && (model->B4SOIrdsMod != 1))
{ model->B4SOIrdsMod = 0;
printf("Warning: rdsMod has been set to its default value: 0.\n");
}
if (!model->B4SOIrbodyModGiven)
model->B4SOIrbodyMod = 0;
else if ((model->B4SOIrbodyMod != 0) && (model->B4SOIrbodyMod != 1))
{ model->B4SOIrbodyMod = 0;
printf("Warning: rbodyMod has been set to its default value: 0.\n");
}
if (!model->B4SOIgbminGiven)
model->B4SOIgbmin = 1.0e-12; /* in mho */
if (!model->B4SOIrbdbGiven)
model->B4SOIrbdb = 50.0; /* in ohm */
if (!model->B4SOIrbsbGiven)
model->B4SOIrbsb = 50.0; /* in ohm */
/* v4.0 end */
/* v2.2.3 */
if (!model->B4SOIdtoxcvGiven)
model->B4SOIdtoxcv = 0.0;
if (!model->B4SOIcdscGiven)
model->B4SOIcdsc = 2.4e-4; /* unit Q/V/m^2 */
if (!model->B4SOIcdscbGiven)
model->B4SOIcdscb = 0.0; /* unit Q/V/m^2 */
if (!model->B4SOIcdscdGiven)
model->B4SOIcdscd = 0.0; /* unit Q/V/m^2 */
if (!model->B4SOIcitGiven)
model->B4SOIcit = 0.0; /* unit Q/V/m^2 */
if (!model->B4SOInfactorGiven)
model->B4SOInfactor = 1;
if (!model->B4SOIvsatGiven)
model->B4SOIvsat = 8.0e4; /* unit m/s */
if (!model->B4SOIatGiven)
model->B4SOIat = 3.3e4; /* unit m/s */
if (!model->B4SOIa0Given)
model->B4SOIa0 = 1.0;
if (!model->B4SOIagsGiven)
model->B4SOIags = 0.0;
if (!model->B4SOIa1Given)
model->B4SOIa1 = 0.0;
if (!model->B4SOIa2Given)
model->B4SOIa2 = 1.0;
if (!model->B4SOIketaGiven)
model->B4SOIketa = -0.6; /* unit / V */
if (!model->B4SOInsubGiven)
model->B4SOInsub = 6.0e16; /* unit 1/cm3 */
if (!model->B4SOInpeakGiven)
model->B4SOInpeak = 1.7e17; /* unit 1/cm3 */
if (!model->B4SOIngateGiven)
model->B4SOIngate = 0; /* unit 1/cm3 */
if (!model->B4SOInsdGiven)
model->B4SOInsd = 1.0e20;
if (!model->B4SOIvbmGiven)
model->B4SOIvbm = -3.0;
if (!model->B4SOIxtGiven)
model->B4SOIxt = 1.55e-7;
if (!model->B4SOIkt1Given)
model->B4SOIkt1 = -0.11; /* unit V */
if (!model->B4SOIkt1lGiven)
model->B4SOIkt1l = 0.0; /* unit V*m */
if (!model->B4SOIkt2Given)
model->B4SOIkt2 = 0.022; /* No unit */
if (!model->B4SOIk3Given)
model->B4SOIk3 = 0.0;
if (!model->B4SOIk3bGiven)
model->B4SOIk3b = 0.0;
if (!model->B4SOIw0Given)
model->B4SOIw0 = 2.5e-6;
if (!model->B4SOIlpebGiven)
model->B4SOIlpeb = 0.0;
if (!model->B4SOIdvt0Given)
model->B4SOIdvt0 = 2.2;
if (!model->B4SOIdvt1Given)
model->B4SOIdvt1 = 0.53;
if (!model->B4SOIdvt2Given)
model->B4SOIdvt2 = -0.032; /* unit 1 / V */
if (!model->B4SOIdvt0wGiven)
model->B4SOIdvt0w = 0.0;
if (!model->B4SOIdvt1wGiven)
model->B4SOIdvt1w = 5.3e6;
if (!model->B4SOIdvt2wGiven)
model->B4SOIdvt2w = -0.032;
if (!model->B4SOIdroutGiven)
model->B4SOIdrout = 0.56;
if (!model->B4SOIdsubGiven)
model->B4SOIdsub = model->B4SOIdrout;
if (!model->B4SOIvth0Given)
model->B4SOIvth0 = (model->B4SOItype == NMOS) ? 0.7 : -0.7;
if (!model->B4SOIvfbGiven)
model->B4SOIvfb = -1.0; /* v4.1 */
if (!model->B4SOIuaGiven)
model->B4SOIua = 2.25e-9; /* unit m/V */
if (!model->B4SOIua1Given)
model->B4SOIua1 = 4.31e-9; /* unit m/V */
if (!model->B4SOIubGiven)
model->B4SOIub = 5.87e-19; /* unit (m/V)**2 */
if (!model->B4SOIub1Given)
model->B4SOIub1 = -7.61e-18; /* unit (m/V)**2 */
if (!model->B4SOIucGiven)
model->B4SOIuc = (model->B4SOImobMod == 3) ? -0.0465 : -0.0465e-9;
if (!model->B4SOIuc1Given)
model->B4SOIuc1 = (model->B4SOImobMod == 3) ? -0.056 : -0.056e-9;
if (!model->B4SOIu0Given)
model->B4SOIu0 = (model->B4SOItype == NMOS) ? 0.067 : 0.025;
if (!model->B4SOIuteGiven)
model->B4SOIute = -1.5;
/*4.1 mobmod =4 */
if (!model->B4SOIudGiven)
model->B4SOIud = 0.0;
if (!model->B4SOIludGiven)
model->B4SOIlud = 0.0;
if (!model->B4SOIwudGiven)
model->B4SOIwud = 0.0;
if (!model->B4SOIpudGiven)
/* model->B4SOIpud1 = 0.0; */ /*Bug fix # 33 Jul 09 */
model->B4SOIpud = 0.0;
if (!model->B4SOIud1Given)
model->B4SOIud1 = 0.0;
if (!model->B4SOIlud1Given)
model->B4SOIlud1 = 0.0;
if (!model->B4SOIwud1Given)
model->B4SOIwud1 = 0.0;
if (!model->B4SOIpud1Given)
model->B4SOIpud1 = 0.0;
if (!model->B4SOIeuGiven)
model->B4SOIeu = (model->B4SOItype == NMOS) ? 1.67 : 1.0;
if (!model->B4SOIleuGiven)
model->B4SOIleu = 0.0;
if (!model->B4SOIweuGiven)
model->B4SOIweu = 0.0;
if (!model->B4SOIpeuGiven)
model->B4SOIpeu = 0.0;
if (!model->B4SOIucsGiven)
model->B4SOIucs = (model->B4SOItype == NMOS) ? 1.67 : 1.0;
if (!model->B4SOIlucsGiven)
model->B4SOIlucs =0.0;
if (!model->B4SOIwucsGiven)
model->B4SOIwucs =0.0;
if (!model->B4SOIpucsGiven)
model->B4SOIpucs =0.0;
if (!model->B4SOIucsteGiven)
model->B4SOIucste = -4.775e-3;
if (!model->B4SOIlucsteGiven)
model->B4SOIlucste = 0.0;
if (!model->B4SOIwucsteGiven)
model->B4SOIwucste = 0.0;
if (!model->B4SOIpucsteGiven)
model->B4SOIpucste = 0.0;
if (!model->B4SOIvoffGiven)
model->B4SOIvoff = -0.08;
if (!model->B4SOIdeltaGiven)
model->B4SOIdelta = 0.01;
if (!model->B4SOIrdswGiven)
model->B4SOIrdsw = 100;
if (!model->B4SOIrswGiven) /* v4.0 */
model->B4SOIrsw = 50;
if (!model->B4SOIrdwGiven) /* v4.0 */
model->B4SOIrdw = 50;
if (!model->B4SOIrswminGiven) /* v4.0 */
model->B4SOIrswmin = 0.0;
if (!model->B4SOIrdwminGiven) /* v4.0 */
model->B4SOIrdwmin = 0.0;
if (!model->B4SOIprwgGiven)
model->B4SOIprwg = 0.0; /* unit 1/V */
if (!model->B4SOIprwbGiven)
model->B4SOIprwb = 0.0;
if (!model->B4SOIprtGiven)
model->B4SOIprt = 0.0;
if (!model->B4SOIeta0Given)
model->B4SOIeta0 = 0.08; /* no unit */
if (!model->B4SOIetabGiven)
model->B4SOIetab = -0.07; /* unit 1/V */
if (!model->B4SOIpclmGiven)
model->B4SOIpclm = 1.3; /* no unit */
if (!model->B4SOIpdibl1Given)
model->B4SOIpdibl1 = .39; /* no unit */
if (!model->B4SOIpdibl2Given)
model->B4SOIpdibl2 = 0.0086; /* no unit */
if (!model->B4SOIpdiblbGiven)
model->B4SOIpdiblb = 0.0; /* 1/V */
if (!model->B4SOIpvagGiven)
model->B4SOIpvag = 0.0;
if (!model->B4SOIwrGiven)
model->B4SOIwr = 1.0;
if (!model->B4SOIdwgGiven)
model->B4SOIdwg = 0.0;
if (!model->B4SOIdwbGiven)
model->B4SOIdwb = 0.0;
if (!model->B4SOIb0Given)
model->B4SOIb0 = 0.0;
if (!model->B4SOIb1Given)
model->B4SOIb1 = 0.0;
if (!model->B4SOIalpha0Given)
model->B4SOIalpha0 = 0.0;
if (!model->B4SOIcgslGiven)
model->B4SOIcgsl = 0.0;
if (!model->B4SOIcgdlGiven)
model->B4SOIcgdl = 0.0;
if (!model->B4SOIckappaGiven)
model->B4SOIckappa = 0.6;
if (!model->B4SOIclcGiven)
model->B4SOIclc = 0.1e-7;
if (!model->B4SOIcleGiven)
model->B4SOIcle = 0.0;
if (!model->B4SOItboxGiven)
model->B4SOItbox = 3e-7;
if (!model->B4SOItsiGiven)
model->B4SOItsi = 1e-7;
if (!model->B4SOIetsiGiven)
model->B4SOIetsi = 1e-7;
if (!model->B4SOIxjGiven)
model->B4SOIxj = model->B4SOItsi;
if (!model->B4SOIrbodyGiven)
model->B4SOIrbody = 0.0;
if (!model->B4SOIrbshGiven)
model->B4SOIrbsh = 0.0;
if (!model->B4SOIrth0Given)
model->B4SOIrth0 = 0;
/* v3.0 bug fix */
if (!model->B4SOIcth0Given)
model->B4SOIcth0 = 1e-5;
if (!model->B4SOIcfrcoeffGiven) /* v4.4 */
model->B4SOIcfrcoeff = 1.0;
if (!model->B4SOIagidlGiven)
model->B4SOIagidl = 0.0;
if (!model->B4SOIbgidlGiven)
model->B4SOIbgidl = 2.3e9; /* v4.0 */
if (!model->B4SOIcgidlGiven) /* v4.0 */
model->B4SOIcgidl = 0.5; /* v4.2 default value changed from 0 to 0.5 */
if (!model->B4SOIrgidlGiven) /* v4.1 */
model->B4SOIrgidl = 1.0;
if (!model->B4SOIkgidlGiven) /* v4.1 */
model->B4SOIkgidl = 0.0;
if (!model->B4SOIfgidlGiven) /* v4.1 */
model->B4SOIfgidl = 0.0;
if (!model->B4SOIagislGiven)
model->B4SOIagisl = model->B4SOIagidl;
if (!model->B4SOIbgislGiven)
model->B4SOIbgisl = model->B4SOIbgidl; /* v4.0 */
if (!model->B4SOIcgislGiven) /* v4.0 */
model->B4SOIcgisl = model->B4SOIcgidl;
if (!model->B4SOIrgislGiven) /* v4.1 */
model->B4SOIrgisl = model->B4SOIrgidl;
if (!model->B4SOIkgislGiven) /* v4.1 */
model->B4SOIkgisl = model->B4SOIkgidl;
if (!model->B4SOIfgislGiven) /* v4.1 */
model->B4SOIfgisl = model->B4SOIfgidl;
if (!model->B4SOIndiodeGiven) /* v4.0 */
model->B4SOIndiode = 1.0;
if (!model->B4SOIndiodedGiven) /* v4.0 */
model->B4SOIndioded = model->B4SOIndiode;
if (!model->B4SOIntunGiven) /* v4.0 */
model->B4SOIntun = 10.0;
if (!model->B4SOIntundGiven) /* v4.0 */
model->B4SOIntund = model->B4SOIntun;
if (!model->B4SOInrecf0Given)
model->B4SOInrecf0 = 2.0;
if (!model->B4SOInrecf0dGiven)
model->B4SOInrecf0d = model->B4SOInrecf0;
if (!model->B4SOInrecr0Given)
model->B4SOInrecr0 = 10.0;
if (!model->B4SOInrecr0dGiven)
model->B4SOInrecr0d = model->B4SOInrecr0;
if (!model->B4SOIisbjtGiven)
model->B4SOIisbjt = 1e-6;
if (!model->B4SOIidbjtGiven)
model->B4SOIidbjt = model->B4SOIisbjt;
if (!model->B4SOIisdifGiven)
model->B4SOIisdif = 0.0;
if (!model->B4SOIiddifGiven)
model->B4SOIiddif = model->B4SOIisdif; /* v4.0 */
if (!model->B4SOIisrecGiven)
model->B4SOIisrec = 1e-5;
if (!model->B4SOIidrecGiven)
model->B4SOIidrec = model->B4SOIisrec;
if (!model->B4SOIistunGiven)
model->B4SOIistun = 0.0;
if (!model->B4SOIidtunGiven)
model->B4SOIidtun = model->B4SOIistun;
if (!model->B4SOIxbjtGiven)
model->B4SOIxbjt = 1.0;
if (!model->B4SOIxdifGiven)
model->B4SOIxdif = model->B4SOIxbjt;
if (!model->B4SOIxdifdGiven)
model->B4SOIxdifd = model->B4SOIxdif;
if (!model->B4SOIxrecGiven)
model->B4SOIxrec = 1.0;
if (!model->B4SOIxrecdGiven)
model->B4SOIxrecd = model->B4SOIxrec;
if (!model->B4SOIxtunGiven)
model->B4SOIxtun = 0.0;
if (!model->B4SOIxtundGiven)
model->B4SOIxtund = model->B4SOIxtun;
if (!model->B4SOIttGiven)
model->B4SOItt = 1e-12;
if (!model->B4SOIasdGiven)
model->B4SOIasd = 0.3;
/* 4.0 backward compatibility */
if (!model->B4SOIlpe0Given) {
if(!model->B4SOInlxGiven)
model->B4SOIlpe0 = 1.74e-7;
else
model->B4SOIlpe0 = model->B4SOInlx;
}
if(model->B4SOIlpe0Given && model->B4SOInlxGiven)
printf("Warning: both lpe0 and nlx are given. Lpe0 value is taken \n");
if (!model->B4SOIllpe0Given) {
if(!model->B4SOIlnlxGiven)
model->B4SOIllpe0 = 0.0;
else
model->B4SOIllpe0 = model->B4SOIlnlx;
}
if(model->B4SOIllpe0Given && model->B4SOIlnlxGiven)
printf("Warning: both llpe0 and lnlx are given. Llpe0 value is taken \n");
if (!model->B4SOIwlpe0Given) {
if(!model->B4SOIwnlxGiven)
model->B4SOIwlpe0 = 0.0;
else
model->B4SOIwlpe0 = model->B4SOIwnlx;
}
if(model->B4SOIwlpe0Given && model->B4SOIwnlxGiven)
printf("Warning: both wlpe0 and wnlx are given. Wlpe0 value is taken \n");
if (!model->B4SOIplpe0Given) {
if(!model->B4SOIpnlxGiven)
model->B4SOIplpe0 = 0.0;
else
model->B4SOIplpe0 = model->B4SOIpnlx;
}
if(model->B4SOIplpe0Given && model->B4SOIpnlxGiven)
printf("Warning: both plpe0 and pnlx are given. Plpe0 value is taken \n");
if (!model->B4SOIegidlGiven) {
if(!model->B4SOIngidlGiven)
model->B4SOIegidl = 1.2;
else
model->B4SOIegidl = model->B4SOIngidl;
}
if(model->B4SOIegidlGiven && model->B4SOIngidlGiven)
printf("Warning: both egidl and ngidl are given. Egidl value is taken \n");
if (!model->B4SOIlegidlGiven) {
if(!model->B4SOIlngidlGiven)
model->B4SOIlegidl = 0.0;
else
model->B4SOIlegidl = model->B4SOIlngidl;
}
if(model->B4SOIlegidlGiven && model->B4SOIlngidlGiven)
printf("Warning: both legidl and lngidl are given. Legidl value is taken \n");
if (!model->B4SOIwegidlGiven) {
if(!model->B4SOIwngidlGiven)
model->B4SOIwegidl = 0.0;
else
model->B4SOIwegidl = model->B4SOIwngidl;
}
if(model->B4SOIwegidlGiven && model->B4SOIwngidlGiven)
printf("Warning: both wegidl and wngidl are given. Wegidl value is taken \n");
if (!model->B4SOIpegidlGiven) {
if(!model->B4SOIpngidlGiven)
model->B4SOIpegidl = 0.0;
else
model->B4SOIpegidl = model->B4SOIpngidl;
}
if(model->B4SOIpegidlGiven && model->B4SOIpngidlGiven)
printf("Warning: both pegidl and pngidl are given. Pegidl value is taken \n");
if (!model->B4SOIegislGiven) {
model->B4SOIegisl = model->B4SOIegidl;
}
if (!model->B4SOIlegislGiven) {
model->B4SOIlegisl = model->B4SOIlegidl;
}
if (!model->B4SOIwegislGiven) {
model->B4SOIwegisl = model->B4SOIwegidl;
}
if (!model->B4SOIpegislGiven) {
model->B4SOIpegisl = model->B4SOIpegidl;
}
/* unit degree celcius */
if (!model->B4SOItnomGiven)
model->B4SOItnom = ckt->CKTnomTemp;
if (!model->B4SOILintGiven)
model->B4SOILint = 0.0;
if (!model->B4SOILlGiven)
model->B4SOILl = 0.0;
if (!model->B4SOILlcGiven)
model->B4SOILlc = 0.0; /* v2.2.3 */
if (!model->B4SOILlnGiven)
model->B4SOILln = 1.0;
if (!model->B4SOILwGiven)
model->B4SOILw = 0.0;
if (!model->B4SOILwcGiven)
model->B4SOILwc = 0.0; /* v2.2.3 */
if (!model->B4SOILwnGiven)
model->B4SOILwn = 1.0;
if (!model->B4SOILwlGiven)
model->B4SOILwl = 0.0;
if (!model->B4SOILwlcGiven)
model->B4SOILwlc = 0.0; /* v2.2.3 */
if (!model->B4SOILminGiven)
model->B4SOILmin = 0.0;
if (!model->B4SOILmaxGiven)
model->B4SOILmax = 1.0;
if (!model->B4SOIWintGiven)
model->B4SOIWint = 0.0;
if (!model->B4SOIWlGiven)
model->B4SOIWl = 0.0;
if (!model->B4SOIWlcGiven)
model->B4SOIWlc = 0.0; /* v2.2.3 */
if (!model->B4SOIWlnGiven)
model->B4SOIWln = 1.0;
if (!model->B4SOIWwGiven)
model->B4SOIWw = 0.0;
if (!model->B4SOIWwcGiven)
model->B4SOIWwc = 0.0; /* v2.2.3 */
if (!model->B4SOIWwnGiven)
model->B4SOIWwn = 1.0;
if (!model->B4SOIWwlGiven)
model->B4SOIWwl = 0.0;
if (!model->B4SOIWwlcGiven)
model->B4SOIWwlc = 0.0; /* v2.2.3 */
if (!model->B4SOIWminGiven)
model->B4SOIWmin = 0.0;
if (!model->B4SOIWmaxGiven)
model->B4SOIWmax = 1.0;
if (!model->B4SOIdwcGiven)
model->B4SOIdwc = model->B4SOIWint;
if (!model->B4SOIdlcGiven)
model->B4SOIdlc = model->B4SOILint;
if (!model->B4SOIdlcigGiven)
model->B4SOIdlcig = model->B4SOILint; /* v3.0 */
/* v3.0 */
if (!model->B4SOIvbs0pdGiven)
model->B4SOIvbs0pd = 0.0; /* v3.2 */
if (!model->B4SOIvbs0fdGiven)
model->B4SOIvbs0fd = 0.5; /* v3.2 */
if (!model->B4SOIvbsaGiven)
model->B4SOIvbsa = 0.0;
if (!model->B4SOInofffdGiven)
model->B4SOInofffd = 1.0;
if (!model->B4SOIvofffdGiven)
model->B4SOIvofffd = 0.0;
if (!model->B4SOIk1bGiven)
model->B4SOIk1b = 1.0;
if (!model->B4SOIk2bGiven)
model->B4SOIk2b = 0.0;
if (!model->B4SOIdk2bGiven)
model->B4SOIdk2b = 0.0;
if (!model->B4SOIdvbd0Given)
model->B4SOIdvbd0 = 0.0;
if (!model->B4SOIdvbd1Given)
model->B4SOIdvbd1 = 0.0;
if (!model->B4SOImoinFDGiven)
model->B4SOImoinFD = 1e3;
/* v3.1 added for RF */
if (!model->B4SOIxrcrg1Given)
model->B4SOIxrcrg1 =12.0;
if (!model->B4SOIxrcrg2Given)
model->B4SOIxrcrg2 =1.0;
if (!model->B4SOIrshgGiven)
model->B4SOIrshg =0.1;
if (!model->B4SOIngconGiven)
model->B4SOIngcon =1.0;
if (!model->B4SOIxgwGiven)
model->B4SOIxgw = 0.0;
if (!model->B4SOIxglGiven)
model->B4SOIxgl = 0.0;
/* v3.1 added for RF end */
/* v2.2 release */
if (!model->B4SOIwth0Given)
model->B4SOIwth0 = 0.0;
if (!model->B4SOIrhaloGiven)
model->B4SOIrhalo = 1e15;
if (!model->B4SOIntoxGiven)
model->B4SOIntox = 1;
if (!model->B4SOItoxrefGiven)
model->B4SOItoxref = 2.5e-9;
if (!model->B4SOIebgGiven)
model->B4SOIebg = 1.2;
if (!model->B4SOIvevbGiven)
model->B4SOIvevb = 0.075;
if (!model->B4SOIalphaGB1Given)
model->B4SOIalphaGB1 = 0.35;
if (!model->B4SOIbetaGB1Given)
model->B4SOIbetaGB1 = 0.03;
if (!model->B4SOIvgb1Given)
model->B4SOIvgb1 = 300;
if (!model->B4SOIalphaGB2Given)
model->B4SOIalphaGB2 = 0.43;
if (!model->B4SOIbetaGB2Given)
model->B4SOIbetaGB2 = 0.05;
if (!model->B4SOIvecbGiven)
model->B4SOIvecb = 0.026;
if (!model->B4SOIvgb2Given)
model->B4SOIvgb2 = 17;
if (!model->B4SOIaigbcp2Given)
model->B4SOIaigbcp2 = 0.043;
if (!model->B4SOIbigbcp2Given)
model->B4SOIbigbcp2 = 0.0054;
if (!model->B4SOIcigbcp2Given)
model->B4SOIcigbcp2 = 0.0075;
if (!model->B4SOItoxqmGiven)
model->B4SOItoxqm = model->B4SOItox;
if (!model->B4SOIvoxhGiven)
model->B4SOIvoxh = 5.0;
if (!model->B4SOIdeltavoxGiven)
model->B4SOIdeltavox = 0.005;
/* v3.0 */
if (!model->B4SOIigbModGiven)
model->B4SOIigbMod = 0;
if (!model->B4SOIigcModGiven)
model->B4SOIigcMod = 0;
if (!model->B4SOInigcGiven)
model->B4SOInigc = 1.0;
if (!model->B4SOIaigcGiven)
model->B4SOIaigc = (model->B4SOItype == NMOS) ? 0.43 : 0.31;
if (!model->B4SOIbigcGiven)
model->B4SOIbigc = (model->B4SOItype == NMOS) ? 0.054 : 0.024;
if (!model->B4SOIcigcGiven)
model->B4SOIcigc = (model->B4SOItype == NMOS) ? 0.075 : 0.03;
if (!model->B4SOIaigsdGiven)
model->B4SOIaigsd = (model->B4SOItype == NMOS) ? 0.43 : 0.31;
if (!model->B4SOIbigsdGiven)
model->B4SOIbigsd = (model->B4SOItype == NMOS) ? 0.054 : 0.024;
if (!model->B4SOIcigsdGiven)
model->B4SOIcigsd = (model->B4SOItype == NMOS) ? 0.075 : 0.03;
if (!model->B4SOIpigcdGiven)
model->B4SOIpigcd = 1.0;
if (!model->B4SOIpoxedgeGiven)
model->B4SOIpoxedge = 1.0;
/* v2.0 release */
if (!model->B4SOIk1w1Given)
model->B4SOIk1w1 = 0.0;
if (!model->B4SOIk1w2Given)
model->B4SOIk1w2 = 0.0;
if (!model->B4SOIketasGiven)
model->B4SOIketas = 0.0;
if (!model->B4SOIdwbcGiven)
model->B4SOIdwbc = 0.0;
if (!model->B4SOIbeta0Given)
model->B4SOIbeta0 = 0.0;
if (!model->B4SOIbeta1Given)
model->B4SOIbeta1 = 0.0;
if (!model->B4SOIbeta2Given)
model->B4SOIbeta2 = 0.1;
if (!model->B4SOIvdsatii0Given)
model->B4SOIvdsatii0 = 0.9;
if (!model->B4SOItiiGiven)
model->B4SOItii = 0.0;
if (!model->B4SOIliiGiven)
model->B4SOIlii = 0.0;
if (!model->B4SOIsii0Given)
model->B4SOIsii0 = 0.5;
if (!model->B4SOIsii1Given)
model->B4SOIsii1 = 0.1;
if (!model->B4SOIsii2Given)
model->B4SOIsii2 = 0.0;
if (!model->B4SOIsiidGiven)
model->B4SOIsiid = 0.0;
if (!model->B4SOIfbjtiiGiven)
model->B4SOIfbjtii = 0.0;
/*4.1 Iii model*/
if (!model->B4SOIebjtiiGiven)
model->B4SOIebjtii = 0.0;
if (!model->B4SOIcbjtiiGiven)
model->B4SOIcbjtii = 0.0;
if (!model->B4SOIvbciGiven)
model->B4SOIvbci = 0.0;
if (!model->B4SOItvbciGiven)
model->B4SOItvbci = 0.0;
if (!model->B4SOIabjtiiGiven)
model->B4SOIabjtii = 0.0;
if (!model->B4SOImbjtiiGiven)
model->B4SOImbjtii = 0.4;
if (!model->B4SOIesatiiGiven)
model->B4SOIesatii = 1e7;
if (!model->B4SOIlnGiven)
model->B4SOIln = 2e-6;
if (!model->B4SOIvrec0Given) /* v4.0 */
model->B4SOIvrec0 = 0;
if (!model->B4SOIvrec0dGiven) /* v4.0 */
model->B4SOIvrec0d = model->B4SOIvrec0;
if (!model->B4SOIvtun0Given) /* v4.0 */
model->B4SOIvtun0 = 0;
if (!model->B4SOIvtun0dGiven) /* v4.0 */
model->B4SOIvtun0d = model->B4SOIvtun0;
if (!model->B4SOInbjtGiven)
model->B4SOInbjt = 1.0;
if (!model->B4SOIlbjt0Given)
model->B4SOIlbjt0 = 0.20e-6;
if (!model->B4SOIldif0Given)
model->B4SOIldif0 = 1.0;
if (!model->B4SOIvabjtGiven)
model->B4SOIvabjt = 10.0;
if (!model->B4SOIaelyGiven)
model->B4SOIaely = 0;
if (!model->B4SOIahliGiven) /* v4.0 */
model->B4SOIahli = 0;
if (!model->B4SOIahlidGiven) /* v4.0 */
model->B4SOIahlid = model->B4SOIahli;
if (!model->B4SOIrbodyGiven)
model->B4SOIrbody = 0.0;
if (!model->B4SOIrbshGiven)
model->B4SOIrbsh = 0.0;
if (!model->B4SOIntrecfGiven)
model->B4SOIntrecf = 0.0;
if (!model->B4SOIntrecrGiven)
model->B4SOIntrecr = 0.0;
if (!model->B4SOIndifGiven)
model->B4SOIndif = -1.0;
if (!model->B4SOIdlcbGiven)
model->B4SOIdlcb = 0.0;
if (!model->B4SOIfbodyGiven)
model->B4SOIfbody = 1.0;
if (!model->B4SOItcjswgGiven)
model->B4SOItcjswg = 0.0;
if (!model->B4SOItpbswgGiven)
model->B4SOItpbswg = 0.0;
if (!model->B4SOItcjswgdGiven)
model->B4SOItcjswgd = model->B4SOItcjswg;
if (!model->B4SOItpbswgdGiven)
model->B4SOItpbswgd = model->B4SOItpbswg;
if (!model->B4SOIacdeGiven)
model->B4SOIacde = 1.0;
if (!model->B4SOImoinGiven)
model->B4SOImoin = 15.0;
if (!model->B4SOInoffGiven)
model->B4SOInoff = 1.0; /* v3.2 */
if (!model->B4SOIdelvtGiven)
model->B4SOIdelvt = 0.0;
if (!model->B4SOIkb1Given)
model->B4SOIkb1 = 1.0;
if (!model->B4SOIdlbgGiven)
model->B4SOIdlbg = 0.0;
/* Added for binning - START */
/* Length dependence */
/* v3.1 */
if (!model->B4SOIlxjGiven)
model->B4SOIlxj = 0.0;
if (!model->B4SOIlalphaGB1Given)
model->B4SOIlalphaGB1 = 0.0;
if (!model->B4SOIlalphaGB2Given)
model->B4SOIlalphaGB2 = 0.0;
if (!model->B4SOIlbetaGB1Given)
model->B4SOIlbetaGB1 = 0.0;
if (!model->B4SOIlbetaGB2Given)
model->B4SOIlbetaGB2 = 0.0;
if (!model->B4SOIlaigbcp2Given)
model->B4SOIlaigbcp2 = 0.0;
if (!model->B4SOIlbigbcp2Given)
model->B4SOIlbigbcp2 = 0.0;
if (!model->B4SOIlcigbcp2Given)
model->B4SOIlcigbcp2 = 0.0;
if (!model->B4SOIlndifGiven)
model->B4SOIlndif = 0.0;
if (!model->B4SOIlntrecfGiven)
model->B4SOIlntrecf = 0.0;
if (!model->B4SOIlntrecrGiven)
model->B4SOIlntrecr = 0.0;
if (!model->B4SOIlxbjtGiven)
model->B4SOIlxbjt = 0.0;
if (!model->B4SOIlxdifGiven)
model->B4SOIlxdif = 0.0;
if (!model->B4SOIlxrecGiven)
model->B4SOIlxrec = 0.0;
if (!model->B4SOIlxtunGiven)
model->B4SOIlxtun = 0.0;
if (!model->B4SOIlxdifdGiven)
model->B4SOIlxdifd = model->B4SOIlxdif;
if (!model->B4SOIlxrecdGiven)
model->B4SOIlxrecd = model->B4SOIlxrec;
if (!model->B4SOIlxtundGiven)
model->B4SOIlxtund = model->B4SOIlxtun;
if (!model->B4SOIlcgdlGiven)
model->B4SOIlcgdl = 0.0;
if (!model->B4SOIlcgslGiven)
model->B4SOIlcgsl = 0.0;
if (!model->B4SOIlckappaGiven)
model->B4SOIlckappa = 0.0;
if (!model->B4SOIluteGiven)
model->B4SOIlute = 0.0;
if (!model->B4SOIlkt1Given)
model->B4SOIlkt1 = 0.0;
if (!model->B4SOIlkt2Given)
model->B4SOIlkt2 = 0.0;
if (!model->B4SOIlkt1lGiven)
model->B4SOIlkt1l = 0.0;
if (!model->B4SOIlua1Given)
model->B4SOIlua1 = 0.0;
if (!model->B4SOIlub1Given)
model->B4SOIlub1 = 0.0;
if (!model->B4SOIluc1Given)
model->B4SOIluc1 = 0.0;
if (!model->B4SOIlatGiven)
model->B4SOIlat = 0.0;
if (!model->B4SOIlprtGiven)
model->B4SOIlprt = 0.0;
/* v3.0 */
if (!model->B4SOIlnigcGiven)
model->B4SOIlnigc = 0.0;
if (!model->B4SOIlpigcdGiven)
model->B4SOIlpigcd = 0.0;
if (!model->B4SOIlpoxedgeGiven)
model->B4SOIlpoxedge = 0.0;
if (!model->B4SOIlaigcGiven)
model->B4SOIlaigc = 0.0;
if (!model->B4SOIlbigcGiven)
model->B4SOIlbigc = 0.0;
if (!model->B4SOIlcigcGiven)
model->B4SOIlcigc = 0.0;
if (!model->B4SOIlaigsdGiven)
model->B4SOIlaigsd = 0.0;
if (!model->B4SOIlbigsdGiven)
model->B4SOIlbigsd = 0.0;
if (!model->B4SOIlcigsdGiven)
model->B4SOIlcigsd = 0.0;
if (!model->B4SOIlnpeakGiven)
model->B4SOIlnpeak = 0.0;
if (!model->B4SOIlnsubGiven)
model->B4SOIlnsub = 0.0;
if (!model->B4SOIlngateGiven)
model->B4SOIlngate = 0.0;
if (!model->B4SOIlnsdGiven)
model->B4SOIlnsd = 0.0;
if (!model->B4SOIlvth0Given)
model->B4SOIlvth0 = 0.0;
if (!model->B4SOIlvfbGiven)
model->B4SOIlvfb = 0.0; /* v4.1 */
if (!model->B4SOIlk1Given)
model->B4SOIlk1 = 0.0;
if (!model->B4SOIlk1w1Given)
model->B4SOIlk1w1 = 0.0;
if (!model->B4SOIlk1w2Given)
model->B4SOIlk1w2 = 0.0;
if (!model->B4SOIlk2Given)
model->B4SOIlk2 = 0.0;
if (!model->B4SOIlk3Given)
model->B4SOIlk3 = 0.0;
if (!model->B4SOIlk3bGiven)
model->B4SOIlk3b = 0.0;
if (!model->B4SOIlkb1Given)
model->B4SOIlkb1 = 0.0;
if (!model->B4SOIlw0Given)
model->B4SOIlw0 = 0.0;
if (!model->B4SOIllpebGiven)
model->B4SOIllpeb = 0.0;
if (!model->B4SOIldvt0Given)
model->B4SOIldvt0 = 0.0;
if (!model->B4SOIldvt1Given)
model->B4SOIldvt1 = 0.0;
if (!model->B4SOIldvt2Given)
model->B4SOIldvt2 = 0.0;
if (!model->B4SOIldvt0wGiven)
model->B4SOIldvt0w = 0.0;
if (!model->B4SOIldvt1wGiven)
model->B4SOIldvt1w = 0.0;
if (!model->B4SOIldvt2wGiven)
model->B4SOIldvt2w = 0.0;
if (!model->B4SOIlu0Given)
model->B4SOIlu0 = 0.0;
if (!model->B4SOIluaGiven)
model->B4SOIlua = 0.0;
if (!model->B4SOIlubGiven)
model->B4SOIlub = 0.0;
if (!model->B4SOIlucGiven)
model->B4SOIluc = 0.0;
if (!model->B4SOIlvsatGiven)
model->B4SOIlvsat = 0.0;
if (!model->B4SOIla0Given)
model->B4SOIla0 = 0.0;
if (!model->B4SOIlagsGiven)
model->B4SOIlags = 0.0;
if (!model->B4SOIlb0Given)
model->B4SOIlb0 = 0.0;
if (!model->B4SOIlb1Given)
model->B4SOIlb1 = 0.0;
if (!model->B4SOIlketaGiven)
model->B4SOIlketa = 0.0;
if (!model->B4SOIlketasGiven)
model->B4SOIlketas = 0.0;
if (!model->B4SOIla1Given)
model->B4SOIla1 = 0.0;
if (!model->B4SOIla2Given)
model->B4SOIla2 = 0.0;
if (!model->B4SOIlrdswGiven)
model->B4SOIlrdsw = 0.0;
if (!model->B4SOIlrswGiven) /* v4.0 */
model->B4SOIlrsw = 0.0;
if (!model->B4SOIlrdwGiven) /* v4.0 */
model->B4SOIlrdw = 0.0;
if (!model->B4SOIlprwbGiven)
model->B4SOIlprwb = 0.0;
if (!model->B4SOIlprwgGiven)
model->B4SOIlprwg = 0.0;
if (!model->B4SOIlwrGiven)
model->B4SOIlwr = 0.0;
if (!model->B4SOIlnfactorGiven)
model->B4SOIlnfactor = 0.0;
if (!model->B4SOIldwgGiven)
model->B4SOIldwg = 0.0;
if (!model->B4SOIldwbGiven)
model->B4SOIldwb = 0.0;
if (!model->B4SOIlvoffGiven)
model->B4SOIlvoff = 0.0;
if (!model->B4SOIleta0Given)
model->B4SOIleta0 = 0.0;
if (!model->B4SOIletabGiven)
model->B4SOIletab = 0.0;
if (!model->B4SOIldsubGiven)
model->B4SOIldsub = 0.0;
if (!model->B4SOIlcitGiven)
model->B4SOIlcit = 0.0;
if (!model->B4SOIlcdscGiven)
model->B4SOIlcdsc = 0.0;
if (!model->B4SOIlcdscbGiven)
model->B4SOIlcdscb = 0.0;
if (!model->B4SOIlcdscdGiven)
model->B4SOIlcdscd = 0.0;
if (!model->B4SOIlpclmGiven)
model->B4SOIlpclm = 0.0;
if (!model->B4SOIlpdibl1Given)
model->B4SOIlpdibl1 = 0.0;
if (!model->B4SOIlpdibl2Given)
model->B4SOIlpdibl2 = 0.0;
if (!model->B4SOIlpdiblbGiven)
model->B4SOIlpdiblb = 0.0;
if (!model->B4SOIldroutGiven)
model->B4SOIldrout = 0.0;
if (!model->B4SOIlpvagGiven)
model->B4SOIlpvag = 0.0;
if (!model->B4SOIldeltaGiven)
model->B4SOIldelta = 0.0;
if (!model->B4SOIlalpha0Given)
model->B4SOIlalpha0 = 0.0;
if (!model->B4SOIlfbjtiiGiven)
model->B4SOIlfbjtii = 0.0;
/*4.1 Iii model*/
if (!model->B4SOIlebjtiiGiven)
model->B4SOIlebjtii = 0.0;
if (!model->B4SOIlcbjtiiGiven)
model->B4SOIlcbjtii = 0.0;
if (!model->B4SOIlvbciGiven)
model->B4SOIlvbci = 0.0;
if (!model->B4SOIlabjtiiGiven)
model->B4SOIlabjtii = 0.0;
if (!model->B4SOIlmbjtiiGiven)
model->B4SOIlmbjtii = 0.0;
if (!model->B4SOIlbeta0Given)
model->B4SOIlbeta0 = 0.0;
if (!model->B4SOIlbeta1Given)
model->B4SOIlbeta1 = 0.0;
if (!model->B4SOIlbeta2Given)
model->B4SOIlbeta2 = 0.0;
if (!model->B4SOIlvdsatii0Given)
model->B4SOIlvdsatii0 = 0.0;
if (!model->B4SOIlliiGiven)
model->B4SOIllii = 0.0;
if (!model->B4SOIlesatiiGiven)
model->B4SOIlesatii = 0.0;
if (!model->B4SOIlsii0Given)
model->B4SOIlsii0 = 0.0;
if (!model->B4SOIlsii1Given)
model->B4SOIlsii1 = 0.0;
if (!model->B4SOIlsii2Given)
model->B4SOIlsii2 = 0.0;
if (!model->B4SOIlsiidGiven)
model->B4SOIlsiid = 0.0;
if (!model->B4SOIlagidlGiven)
model->B4SOIlagidl = 0.0;
if (!model->B4SOIlbgidlGiven)
model->B4SOIlbgidl = 0.0;
if (!model->B4SOIlcgidlGiven)
model->B4SOIlcgidl = 0.0;
if (!model->B4SOIlrgidlGiven)
model->B4SOIlrgidl = 0.0;
if (!model->B4SOIlkgidlGiven)
model->B4SOIlkgidl = 0.0;
if (!model->B4SOIlfgidlGiven)
model->B4SOIlfgidl = 0.0;
if (!model->B4SOIlagislGiven)
model->B4SOIlagisl = 0.0;
if (!model->B4SOIlbgislGiven)
model->B4SOIlbgisl = 0.0;
if (!model->B4SOIlcgislGiven)
model->B4SOIlcgisl = 0.0;
if (!model->B4SOIlrgislGiven)
model->B4SOIlrgisl = 0.0;
if (!model->B4SOIlkgislGiven)
model->B4SOIlkgisl = 0.0;
if (!model->B4SOIlfgislGiven)
model->B4SOIlfgisl = 0.0;
if (!model->B4SOIlntunGiven) /* v4.0 */
model->B4SOIlntun = 0.0;
if (!model->B4SOIlntundGiven) /* v4.0 */
model->B4SOIlntund = model->B4SOIlntun;
if (!model->B4SOIlndiodeGiven) /* v4.0 */
model->B4SOIlndiode = 0.0;
if (!model->B4SOIlndiodedGiven) /* v4.0 */
model->B4SOIlndioded = model->B4SOIlndiode;
if (!model->B4SOIlnrecf0Given) /* v4.0 */
model->B4SOIlnrecf0 = 0.0;
if (!model->B4SOIlnrecf0dGiven) /* v4.0 */
model->B4SOIlnrecf0d = model->B4SOIlnrecf0;
if (!model->B4SOIlnrecr0Given) /* v4.0 */
model->B4SOIlnrecr0 = 0.0;
if (!model->B4SOIlnrecr0dGiven) /* v4.0 */
model->B4SOIlnrecr0d = model->B4SOIlnrecr0;
if (!model->B4SOIlisbjtGiven)
model->B4SOIlisbjt = 0.0;
if (!model->B4SOIlidbjtGiven)
model->B4SOIlidbjt = model->B4SOIlisbjt;
if (!model->B4SOIlisdifGiven)
model->B4SOIlisdif = 0.0;
if (!model->B4SOIliddifGiven)
model->B4SOIliddif = model->B4SOIlisdif; /* v4.0 */
if (!model->B4SOIlisrecGiven)
model->B4SOIlisrec = 0.0;
if (!model->B4SOIlidrecGiven)
model->B4SOIlidrec = model->B4SOIlisrec;
if (!model->B4SOIlistunGiven)
model->B4SOIlistun = 0.0;
if (!model->B4SOIlidtunGiven)
model->B4SOIlidtun = model->B4SOIlistun;
if (!model->B4SOIlvrec0Given) /* v4.0 */
model->B4SOIlvrec0 = 0;
if (!model->B4SOIlvrec0dGiven) /* v4.0 */
model->B4SOIlvrec0d = model->B4SOIlvrec0;
if (!model->B4SOIlvtun0Given) /* v4.0 */
model->B4SOIlvtun0 = 0;
if (!model->B4SOIlvtun0dGiven) /* v4.0 */
model->B4SOIlvtun0d = model->B4SOIlvtun0;
if (!model->B4SOIlnbjtGiven)
model->B4SOIlnbjt = 0.0;
if (!model->B4SOIllbjt0Given)
model->B4SOIllbjt0 = 0.0;
if (!model->B4SOIlvabjtGiven)
model->B4SOIlvabjt = 0.0;
if (!model->B4SOIlaelyGiven)
model->B4SOIlaely = 0.0;
if (!model->B4SOIlahliGiven) /* v4.0 */
model->B4SOIlahli = 0.0;
if (!model->B4SOIlahlidGiven) /* v4.0 */
model->B4SOIlahlid = model->B4SOIlahli;
/* CV Model */
if (!model->B4SOIlvsdfbGiven)
model->B4SOIlvsdfb = 0.0;
if (!model->B4SOIlvsdthGiven)
model->B4SOIlvsdth = 0.0;
if (!model->B4SOIldelvtGiven)
model->B4SOIldelvt = 0.0;
if (!model->B4SOIlacdeGiven)
model->B4SOIlacde = 0.0;
if (!model->B4SOIlmoinGiven)
model->B4SOIlmoin = 0.0;
if (!model->B4SOIlnoffGiven)
model->B4SOIlnoff = 0.0; /* v3.2 */
/* v3.1 added for RF */
if (!model->B4SOIlxrcrg1Given)
model->B4SOIlxrcrg1 =0.0;
if (!model->B4SOIlxrcrg2Given)
model->B4SOIlxrcrg2 =0.0;
/* v3.1 added for RF end */
/* Width dependence */
/* v3.1 */
if (!model->B4SOIwxjGiven)
model->B4SOIwxj = 0.0;
if (!model->B4SOIwalphaGB1Given)
model->B4SOIwalphaGB1 = 0.0;
if (!model->B4SOIwalphaGB2Given)
model->B4SOIwalphaGB2 = 0.0;
if (!model->B4SOIwbetaGB1Given)
model->B4SOIwbetaGB1 = 0.0;
if (!model->B4SOIwbetaGB2Given)
model->B4SOIwbetaGB2 = 0.0;
if (!model->B4SOIwaigbcp2Given)
model->B4SOIwaigbcp2 = 0.0;
if (!model->B4SOIwbigbcp2Given)
model->B4SOIwbigbcp2 = 0.0;
if (!model->B4SOIwcigbcp2Given)
model->B4SOIwcigbcp2 = 0.0;
if (!model->B4SOIwndifGiven)
model->B4SOIwndif = 0.0;
if (!model->B4SOIwntrecfGiven)
model->B4SOIwntrecf = 0.0;
if (!model->B4SOIwntrecrGiven)
model->B4SOIwntrecr = 0.0;
if (!model->B4SOIwxbjtGiven)
model->B4SOIwxbjt = 0.0;
if (!model->B4SOIwxdifGiven)
model->B4SOIwxdif = 0.0;
if (!model->B4SOIwxrecGiven)
model->B4SOIwxrec = 0.0;
if (!model->B4SOIwxtunGiven)
model->B4SOIwxtun = 0.0;
if (!model->B4SOIwxdifdGiven)
model->B4SOIwxdifd = model->B4SOIwxdif;
if (!model->B4SOIwxrecdGiven)
model->B4SOIwxrecd = model->B4SOIwxrec;
if (!model->B4SOIwxtundGiven)
model->B4SOIwxtund = model->B4SOIwxtun;
if (!model->B4SOIwcgdlGiven)
model->B4SOIwcgdl = 0.0;
if (!model->B4SOIwcgslGiven)
model->B4SOIwcgsl = 0.0;
if (!model->B4SOIwckappaGiven)
model->B4SOIwckappa = 0.0;
if (!model->B4SOIwuteGiven)
model->B4SOIwute = 0.0;
if (!model->B4SOIwkt1Given)
model->B4SOIwkt1 = 0.0;
if (!model->B4SOIwkt2Given)
model->B4SOIwkt2 = 0.0;
if (!model->B4SOIwkt1lGiven)
model->B4SOIwkt1l = 0.0;
if (!model->B4SOIwua1Given)
model->B4SOIwua1 = 0.0;
if (!model->B4SOIwub1Given)
model->B4SOIwub1 = 0.0;
if (!model->B4SOIwuc1Given)
model->B4SOIwuc1 = 0.0;
if (!model->B4SOIwatGiven)
model->B4SOIwat = 0.0;
if (!model->B4SOIwprtGiven)
model->B4SOIwprt = 0.0;
/* v3.0 */
if (!model->B4SOIwnigcGiven)
model->B4SOIwnigc = 0.0;
if (!model->B4SOIwpigcdGiven)
model->B4SOIwpigcd = 0.0;
if (!model->B4SOIwpoxedgeGiven)
model->B4SOIwpoxedge = 0.0;
if (!model->B4SOIwaigcGiven)
model->B4SOIwaigc = 0.0;
if (!model->B4SOIwbigcGiven)
model->B4SOIwbigc = 0.0;
if (!model->B4SOIwcigcGiven)
model->B4SOIwcigc = 0.0;
if (!model->B4SOIwaigsdGiven)
model->B4SOIwaigsd = 0.0;
if (!model->B4SOIwbigsdGiven)
model->B4SOIwbigsd = 0.0;
if (!model->B4SOIwcigsdGiven)
model->B4SOIwcigsd = 0.0;
if (!model->B4SOIwnpeakGiven)
model->B4SOIwnpeak = 0.0;
if (!model->B4SOIwnsubGiven)
model->B4SOIwnsub = 0.0;
if (!model->B4SOIwngateGiven)
model->B4SOIwngate = 0.0;
if (!model->B4SOIwnsdGiven)
model->B4SOIwnsd = 0.0;
if (!model->B4SOIwvth0Given)
model->B4SOIwvth0 = 0.0;
if (!model->B4SOIwvfbGiven)
model->B4SOIwvfb = 0.0; /* v4.1 */
if (!model->B4SOIwk1Given)
model->B4SOIwk1 = 0.0;
if (!model->B4SOIwk1w1Given)
model->B4SOIwk1w1 = 0.0;
if (!model->B4SOIwk1w2Given)
model->B4SOIwk1w2 = 0.0;
if (!model->B4SOIwk2Given)
model->B4SOIwk2 = 0.0;
if (!model->B4SOIwk3Given)
model->B4SOIwk3 = 0.0;
if (!model->B4SOIwk3bGiven)
model->B4SOIwk3b = 0.0;
if (!model->B4SOIwkb1Given)
model->B4SOIwkb1 = 0.0;
if (!model->B4SOIww0Given)
model->B4SOIww0 = 0.0;
if (!model->B4SOIwlpebGiven)
model->B4SOIwlpeb = 0.0;
if (!model->B4SOIwdvt0Given)
model->B4SOIwdvt0 = 0.0;
if (!model->B4SOIwdvt1Given)
model->B4SOIwdvt1 = 0.0;
if (!model->B4SOIwdvt2Given)
model->B4SOIwdvt2 = 0.0;
if (!model->B4SOIwdvt0wGiven)
model->B4SOIwdvt0w = 0.0;
if (!model->B4SOIwdvt1wGiven)
model->B4SOIwdvt1w = 0.0;
if (!model->B4SOIwdvt2wGiven)
model->B4SOIwdvt2w = 0.0;
if (!model->B4SOIwu0Given)
model->B4SOIwu0 = 0.0;
if (!model->B4SOIwuaGiven)
model->B4SOIwua = 0.0;
if (!model->B4SOIwubGiven)
model->B4SOIwub = 0.0;
if (!model->B4SOIwucGiven)
model->B4SOIwuc = 0.0;
if (!model->B4SOIwvsatGiven)
model->B4SOIwvsat = 0.0;
if (!model->B4SOIwa0Given)
model->B4SOIwa0 = 0.0;
if (!model->B4SOIwagsGiven)
model->B4SOIwags = 0.0;
if (!model->B4SOIwb0Given)
model->B4SOIwb0 = 0.0;
if (!model->B4SOIwb1Given)
model->B4SOIwb1 = 0.0;
if (!model->B4SOIwketaGiven)
model->B4SOIwketa = 0.0;
if (!model->B4SOIwketasGiven)
model->B4SOIwketas = 0.0;
if (!model->B4SOIwa1Given)
model->B4SOIwa1 = 0.0;
if (!model->B4SOIwa2Given)
model->B4SOIwa2 = 0.0;
if (!model->B4SOIwrdswGiven)
model->B4SOIwrdsw = 0.0;
if (!model->B4SOIwrswGiven) /* v4.0 */
model->B4SOIwrsw = 0.0;
if (!model->B4SOIwrdwGiven) /* v4.0 */
model->B4SOIwrdw = 0.0;
if (!model->B4SOIwprwbGiven)
model->B4SOIwprwb = 0.0;
if (!model->B4SOIwprwgGiven)
model->B4SOIwprwg = 0.0;
if (!model->B4SOIwwrGiven)
model->B4SOIwwr = 0.0;
if (!model->B4SOIwnfactorGiven)
model->B4SOIwnfactor = 0.0;
if (!model->B4SOIwdwgGiven)
model->B4SOIwdwg = 0.0;
if (!model->B4SOIwdwbGiven)
model->B4SOIwdwb = 0.0;
if (!model->B4SOIwvoffGiven)
model->B4SOIwvoff = 0.0;
if (!model->B4SOIweta0Given)
model->B4SOIweta0 = 0.0;
if (!model->B4SOIwetabGiven)
model->B4SOIwetab = 0.0;
if (!model->B4SOIwdsubGiven)
model->B4SOIwdsub = 0.0;
if (!model->B4SOIwcitGiven)
model->B4SOIwcit = 0.0;
if (!model->B4SOIwcdscGiven)
model->B4SOIwcdsc = 0.0;
if (!model->B4SOIwcdscbGiven)
model->B4SOIwcdscb = 0.0;
if (!model->B4SOIwcdscdGiven)
model->B4SOIwcdscd = 0.0;
if (!model->B4SOIwpclmGiven)
model->B4SOIwpclm = 0.0;
if (!model->B4SOIwpdibl1Given)
model->B4SOIwpdibl1 = 0.0;
if (!model->B4SOIwpdibl2Given)
model->B4SOIwpdibl2 = 0.0;
if (!model->B4SOIwpdiblbGiven)
model->B4SOIwpdiblb = 0.0;
if (!model->B4SOIwdroutGiven)
model->B4SOIwdrout = 0.0;
if (!model->B4SOIwpvagGiven)
model->B4SOIwpvag = 0.0;
if (!model->B4SOIwdeltaGiven)
model->B4SOIwdelta = 0.0;
if (!model->B4SOIwalpha0Given)
model->B4SOIwalpha0 = 0.0;
if (!model->B4SOIwfbjtiiGiven)
model->B4SOIwfbjtii = 0.0;
/*4.1 Iii model*/
if (!model->B4SOIwebjtiiGiven)
model->B4SOIwebjtii = 0.0;
if (!model->B4SOIwcbjtiiGiven)
model->B4SOIwcbjtii = 0.0;
if (!model->B4SOIwvbciGiven)
model->B4SOIwvbci = 0.0;
if (!model->B4SOIwabjtiiGiven)
model->B4SOIwabjtii = 0.0;
if (!model->B4SOIwmbjtiiGiven)
model->B4SOIwmbjtii = 0.0;
if (!model->B4SOIwbeta0Given)
model->B4SOIwbeta0 = 0.0;
if (!model->B4SOIwbeta1Given)
model->B4SOIwbeta1 = 0.0;
if (!model->B4SOIwbeta2Given)
model->B4SOIwbeta2 = 0.0;
if (!model->B4SOIwvdsatii0Given)
model->B4SOIwvdsatii0 = 0.0;
if (!model->B4SOIwliiGiven)
model->B4SOIwlii = 0.0;
if (!model->B4SOIwesatiiGiven)
model->B4SOIwesatii = 0.0;
if (!model->B4SOIwsii0Given)
model->B4SOIwsii0 = 0.0;
if (!model->B4SOIwsii1Given)
model->B4SOIwsii1 = 0.0;
if (!model->B4SOIwsii2Given)
model->B4SOIwsii2 = 0.0;
if (!model->B4SOIwsiidGiven)
model->B4SOIwsiid = 0.0;
if (!model->B4SOIwagidlGiven)
model->B4SOIwagidl = 0.0;
if (!model->B4SOIwbgidlGiven)
model->B4SOIwbgidl = 0.0;
if (!model->B4SOIwcgidlGiven)
model->B4SOIwcgidl = 0.0;
if (!model->B4SOIwrgidlGiven)
model->B4SOIwrgidl = 0.0;
if (!model->B4SOIwkgidlGiven)
model->B4SOIwkgidl = 0.0;
if (!model->B4SOIwfgidlGiven)
model->B4SOIwfgidl = 0.0;
if (!model->B4SOIwagislGiven)
model->B4SOIwagisl = 0.0;
if (!model->B4SOIwbgislGiven)
model->B4SOIwbgisl = 0.0;
if (!model->B4SOIwcgislGiven)
model->B4SOIwcgisl = 0.0;
if (!model->B4SOIwrgislGiven)
model->B4SOIwrgisl = 0.0;
if (!model->B4SOIwkgislGiven)
model->B4SOIwkgisl = 0.0;
if (!model->B4SOIwfgislGiven)
model->B4SOIwfgisl = 0.0;
if (!model->B4SOIwntunGiven) /* v4.0 */
model->B4SOIwntun = 0.0;
if (!model->B4SOIwntundGiven) /* v4.0 */
model->B4SOIwntund = model->B4SOIwntun;
if (!model->B4SOIwndiodeGiven) /* v4.0 */
model->B4SOIwndiode = 0.0;
if (!model->B4SOIwndiodedGiven) /* v4.0 */
model->B4SOIwndioded = model->B4SOIwndiode;
if (!model->B4SOIwnrecf0Given) /* v4.0 */
model->B4SOIwnrecf0 = 0.0;
if (!model->B4SOIwnrecf0dGiven) /* v4.0 */
model->B4SOIwnrecf0d = model->B4SOIwnrecf0;
if (!model->B4SOIwnrecr0Given) /* v4.0 */
model->B4SOIwnrecr0 = 0.0;
if (!model->B4SOIwnrecr0dGiven) /* v4.0 */
model->B4SOIwnrecr0d = model->B4SOIwnrecr0;
if (!model->B4SOIwisbjtGiven)
model->B4SOIwisbjt = 0.0;
if (!model->B4SOIwidbjtGiven)
model->B4SOIwidbjt = model->B4SOIwisbjt;
if (!model->B4SOIwisdifGiven)
model->B4SOIwisdif = 0.0;
if (!model->B4SOIwiddifGiven)
model->B4SOIwiddif = model->B4SOIwisdif; /* v4.0 */
if (!model->B4SOIwisrecGiven)
model->B4SOIwisrec = 0.0;
if (!model->B4SOIwidrecGiven)
model->B4SOIwidrec = model->B4SOIwisrec;
if (!model->B4SOIwistunGiven)
model->B4SOIwistun = 0.0;
if (!model->B4SOIwidtunGiven)
model->B4SOIwidtun = model->B4SOIwistun;
if (!model->B4SOIwvrec0Given) /* v4.0 */
model->B4SOIwvrec0 = 0;
if (!model->B4SOIwvrec0dGiven) /* v4.0 */
model->B4SOIwvrec0d = model->B4SOIwvrec0;
if (!model->B4SOIwvtun0Given) /* v4.0 */
model->B4SOIwvtun0 = 0;
if (!model->B4SOIwvtun0dGiven) /* v4.0 */
model->B4SOIwvtun0d = model->B4SOIwvtun0;
if (!model->B4SOIwnbjtGiven)
model->B4SOIwnbjt = 0.0;
if (!model->B4SOIwlbjt0Given)
model->B4SOIwlbjt0 = 0.0;
if (!model->B4SOIwvabjtGiven)
model->B4SOIwvabjt = 0.0;
if (!model->B4SOIwaelyGiven)
model->B4SOIwaely = 0.0;
if (!model->B4SOIwahliGiven) /* v4.0 */
model->B4SOIwahli = 0.0;
if (!model->B4SOIwahlidGiven) /* v4.0 */
model->B4SOIwahlid = model->B4SOIwahli;
/* v3.1 added for RF */
if (!model->B4SOIwxrcrg1Given)
model->B4SOIwxrcrg1 =0.0;
if (!model->B4SOIwxrcrg2Given)
model->B4SOIwxrcrg2 =0.0;
/* v3.1 added for RF end */
/* CV Model */
if (!model->B4SOIwvsdfbGiven)
model->B4SOIwvsdfb = 0.0;
if (!model->B4SOIwvsdthGiven)
model->B4SOIwvsdth = 0.0;
if (!model->B4SOIwdelvtGiven)
model->B4SOIwdelvt = 0.0;
if (!model->B4SOIwacdeGiven)
model->B4SOIwacde = 0.0;
if (!model->B4SOIwmoinGiven)
model->B4SOIwmoin = 0.0;
if (!model->B4SOIwnoffGiven)
model->B4SOIwnoff = 0.0; /* v3.2 */
/* Cross-term dependence */
/* v3.1 */
if (!model->B4SOIpxjGiven)
model->B4SOIpxj = 0.0;
if (!model->B4SOIpalphaGB1Given)
model->B4SOIpalphaGB1 = 0.0;
if (!model->B4SOIpalphaGB2Given)
model->B4SOIpalphaGB2 = 0.0;
if (!model->B4SOIpbetaGB1Given)
model->B4SOIpbetaGB1 = 0.0;
if (!model->B4SOIpbetaGB2Given)
model->B4SOIpbetaGB2 = 0.0;
if (!model->B4SOIpaigbcp2Given)
model->B4SOIpaigbcp2 = 0.0;
if (!model->B4SOIpbigbcp2Given)
model->B4SOIpbigbcp2 = 0.0;
if (!model->B4SOIpcigbcp2Given)
model->B4SOIpcigbcp2 = 0.0;
if (!model->B4SOIpndifGiven)
model->B4SOIpndif = 0.0;
if (!model->B4SOIpntrecfGiven)
model->B4SOIpntrecf = 0.0;
if (!model->B4SOIpntrecrGiven)
model->B4SOIpntrecr = 0.0;
if (!model->B4SOIpxbjtGiven)
model->B4SOIpxbjt = 0.0;
if (!model->B4SOIpxdifGiven)
model->B4SOIpxdif = 0.0;
if (!model->B4SOIpxrecGiven)
model->B4SOIpxrec = 0.0;
if (!model->B4SOIpxtunGiven)
model->B4SOIpxtun = 0.0;
if (!model->B4SOIpxdifdGiven)
model->B4SOIpxdifd = model->B4SOIpxdif;
if (!model->B4SOIpxrecdGiven)
model->B4SOIpxrecd = model->B4SOIpxrec;
if (!model->B4SOIpxtundGiven)
model->B4SOIpxtund = model->B4SOIpxtun;
if (!model->B4SOIpcgdlGiven)
model->B4SOIpcgdl = 0.0;
if (!model->B4SOIpcgslGiven)
model->B4SOIpcgsl = 0.0;
if (!model->B4SOIpckappaGiven)
model->B4SOIpckappa = 0.0;
if (!model->B4SOIputeGiven)
model->B4SOIpute = 0.0;
if (!model->B4SOIpkt1Given)
model->B4SOIpkt1 = 0.0;
if (!model->B4SOIpkt2Given)
model->B4SOIpkt2 = 0.0;
if (!model->B4SOIpkt1lGiven)
model->B4SOIpkt1l = 0.0;
if (!model->B4SOIpua1Given)
model->B4SOIpua1 = 0.0;
if (!model->B4SOIpub1Given)
model->B4SOIpub1 = 0.0;
if (!model->B4SOIpuc1Given)
model->B4SOIpuc1 = 0.0;
if (!model->B4SOIpatGiven)
model->B4SOIpat = 0.0;
if (!model->B4SOIpprtGiven)
model->B4SOIpprt = 0.0;
/* v3.0 */
if (!model->B4SOIpnigcGiven)
model->B4SOIpnigc = 0.0;
if (!model->B4SOIppigcdGiven)
model->B4SOIppigcd = 0.0;
if (!model->B4SOIppoxedgeGiven)
model->B4SOIppoxedge = 0.0;
if (!model->B4SOIpaigcGiven)
model->B4SOIpaigc = 0.0;
if (!model->B4SOIpbigcGiven)
model->B4SOIpbigc = 0.0;
if (!model->B4SOIpcigcGiven)
model->B4SOIpcigc = 0.0;
if (!model->B4SOIpaigsdGiven)
model->B4SOIpaigsd = 0.0;
if (!model->B4SOIpbigsdGiven)
model->B4SOIpbigsd = 0.0;
if (!model->B4SOIpcigsdGiven)
model->B4SOIpcigsd = 0.0;
if (!model->B4SOIpnpeakGiven)
model->B4SOIpnpeak = 0.0;
if (!model->B4SOIpnsubGiven)
model->B4SOIpnsub = 0.0;
if (!model->B4SOIpngateGiven)
model->B4SOIpngate = 0.0;
if (!model->B4SOIpnsdGiven)
model->B4SOIpnsd = 0.0;
if (!model->B4SOIpvth0Given)
model->B4SOIpvth0 = 0.0;
if (!model->B4SOIpvfbGiven)
model->B4SOIpvfb = 0.0; /* v4.1 */
if (!model->B4SOIpk1Given)
model->B4SOIpk1 = 0.0;
if (!model->B4SOIpk1w1Given)
model->B4SOIpk1w1 = 0.0;
if (!model->B4SOIpk1w2Given)
model->B4SOIpk1w2 = 0.0;
if (!model->B4SOIpk2Given)
model->B4SOIpk2 = 0.0;
if (!model->B4SOIpk3Given)
model->B4SOIpk3 = 0.0;
if (!model->B4SOIpk3bGiven)
model->B4SOIpk3b = 0.0;
if (!model->B4SOIpkb1Given)
model->B4SOIpkb1 = 0.0;
if (!model->B4SOIpw0Given)
model->B4SOIpw0 = 0.0;
if (!model->B4SOIplpebGiven)
model->B4SOIplpeb = 0.0;
if (!model->B4SOIpdvt0Given)
model->B4SOIpdvt0 = 0.0;
if (!model->B4SOIpdvt1Given)
model->B4SOIpdvt1 = 0.0;
if (!model->B4SOIpdvt2Given)
model->B4SOIpdvt2 = 0.0;
if (!model->B4SOIpdvt0wGiven)
model->B4SOIpdvt0w = 0.0;
if (!model->B4SOIpdvt1wGiven)
model->B4SOIpdvt1w = 0.0;
if (!model->B4SOIpdvt2wGiven)
model->B4SOIpdvt2w = 0.0;
if (!model->B4SOIpu0Given)
model->B4SOIpu0 = 0.0;
if (!model->B4SOIpuaGiven)
model->B4SOIpua = 0.0;
if (!model->B4SOIpubGiven)
model->B4SOIpub = 0.0;
if (!model->B4SOIpucGiven)
model->B4SOIpuc = 0.0;
if (!model->B4SOIpvsatGiven)
model->B4SOIpvsat = 0.0;
if (!model->B4SOIpa0Given)
model->B4SOIpa0 = 0.0;
if (!model->B4SOIpagsGiven)
model->B4SOIpags = 0.0;
if (!model->B4SOIpb0Given)
model->B4SOIpb0 = 0.0;
if (!model->B4SOIpb1Given)
model->B4SOIpb1 = 0.0;
if (!model->B4SOIpketaGiven)
model->B4SOIpketa = 0.0;
if (!model->B4SOIpketasGiven)
model->B4SOIpketas = 0.0;
if (!model->B4SOIpa1Given)
model->B4SOIpa1 = 0.0;
if (!model->B4SOIpa2Given)
model->B4SOIpa2 = 0.0;
if (!model->B4SOIprdswGiven)
model->B4SOIprdsw = 0.0;
if (!model->B4SOIprswGiven) /* v4.0 */
model->B4SOIprsw = 0.0;
if (!model->B4SOIprdwGiven) /* v4.0 */
model->B4SOIprdw = 0.0;
if (!model->B4SOIpprwbGiven)
model->B4SOIpprwb = 0.0;
if (!model->B4SOIpprwgGiven)
model->B4SOIpprwg = 0.0;
if (!model->B4SOIpwrGiven)
model->B4SOIpwr = 0.0;
if (!model->B4SOIpnfactorGiven)
model->B4SOIpnfactor = 0.0;
if (!model->B4SOIpdwgGiven)
model->B4SOIpdwg = 0.0;
if (!model->B4SOIpdwbGiven)
model->B4SOIpdwb = 0.0;
if (!model->B4SOIpvoffGiven)
model->B4SOIpvoff = 0.0;
if (!model->B4SOIpeta0Given)
model->B4SOIpeta0 = 0.0;
if (!model->B4SOIpetabGiven)
model->B4SOIpetab = 0.0;
if (!model->B4SOIpdsubGiven)
model->B4SOIpdsub = 0.0;
if (!model->B4SOIpcitGiven)
model->B4SOIpcit = 0.0;
if (!model->B4SOIpcdscGiven)
model->B4SOIpcdsc = 0.0;
if (!model->B4SOIpcdscbGiven)
model->B4SOIpcdscb = 0.0;
if (!model->B4SOIpcdscdGiven)
model->B4SOIpcdscd = 0.0;
if (!model->B4SOIppclmGiven)
model->B4SOIppclm = 0.0;
if (!model->B4SOIppdibl1Given)
model->B4SOIppdibl1 = 0.0;
if (!model->B4SOIppdibl2Given)
model->B4SOIppdibl2 = 0.0;
if (!model->B4SOIppdiblbGiven)
model->B4SOIppdiblb = 0.0;
if (!model->B4SOIpdroutGiven)
model->B4SOIpdrout = 0.0;
if (!model->B4SOIppvagGiven)
model->B4SOIppvag = 0.0;
if (!model->B4SOIpdeltaGiven)
model->B4SOIpdelta = 0.0;
if (!model->B4SOIpalpha0Given)
model->B4SOIpalpha0 = 0.0;
if (!model->B4SOIpfbjtiiGiven)
model->B4SOIpfbjtii = 0.0;
/*4.1 Iii model*/
if (!model->B4SOIpebjtiiGiven)
model->B4SOIpebjtii = 0.0;
if (!model->B4SOIpcbjtiiGiven)
model->B4SOIpcbjtii = 0.0;
if (!model->B4SOIpvbciGiven)
model->B4SOIpvbci = 0.0;
if (!model->B4SOIpabjtiiGiven)
model->B4SOIpabjtii = 0.0;
if (!model->B4SOIpmbjtiiGiven)
model->B4SOIpmbjtii = 0.0;
if (!model->B4SOIpbeta0Given)
model->B4SOIpbeta0 = 0.0;
if (!model->B4SOIpbeta1Given)
model->B4SOIpbeta1 = 0.0;
if (!model->B4SOIpbeta2Given)
model->B4SOIpbeta2 = 0.0;
if (!model->B4SOIpvdsatii0Given)
model->B4SOIpvdsatii0 = 0.0;
if (!model->B4SOIpliiGiven)
model->B4SOIplii = 0.0;
if (!model->B4SOIpesatiiGiven)
model->B4SOIpesatii = 0.0;
if (!model->B4SOIpsii0Given)
model->B4SOIpsii0 = 0.0;
if (!model->B4SOIpsii1Given)
model->B4SOIpsii1 = 0.0;
if (!model->B4SOIpsii2Given)
model->B4SOIpsii2 = 0.0;
if (!model->B4SOIpsiidGiven)
model->B4SOIpsiid = 0.0;
if (!model->B4SOIpagidlGiven)
model->B4SOIpagidl = 0.0;
if (!model->B4SOIpbgidlGiven)
model->B4SOIpbgidl = 0.0;
if (!model->B4SOIpcgidlGiven)
model->B4SOIpcgidl = 0.0;
if (!model->B4SOIprgidlGiven)
model->B4SOIprgidl = 0.0;
if (!model->B4SOIpkgidlGiven)
model->B4SOIpkgidl = 0.0;
if (!model->B4SOIpfgidlGiven)
model->B4SOIpfgidl = 0.0;
if (!model->B4SOIpagislGiven)
model->B4SOIpagisl = 0.0;
if (!model->B4SOIpbgislGiven)
model->B4SOIpbgisl = 0.0;
if (!model->B4SOIpcgislGiven)
model->B4SOIpcgisl = 0.0;
if (!model->B4SOIprgislGiven)
model->B4SOIprgisl = 0.0;
if (!model->B4SOIpkgislGiven)
model->B4SOIpkgisl = 0.0;
if (!model->B4SOIpfgislGiven)
model->B4SOIpfgisl = 0.0;
if (!model->B4SOIpntunGiven) /* v4.0 */
model->B4SOIpntun = 0.0;
if (!model->B4SOIpntundGiven) /* v4.0 */
model->B4SOIpntund = model->B4SOIpntun;
if (!model->B4SOIpndiodeGiven) /* v4.0 */
model->B4SOIpndiode = 0.0;
if (!model->B4SOIpndiodedGiven) /* v4.0 */
model->B4SOIpndioded = model->B4SOIpndiode;
if (!model->B4SOIpnrecf0Given) /* v4.0 */
model->B4SOIpnrecf0 = 0.0;
if (!model->B4SOIpnrecf0dGiven) /* v4.0 */
model->B4SOIpnrecf0d = model->B4SOIpnrecf0;
if (!model->B4SOIpnrecr0Given) /* v4.0 */
model->B4SOIpnrecr0 = 0.0;
if (!model->B4SOIpnrecr0dGiven) /* v4.0 */
model->B4SOIpnrecr0d = model->B4SOIpnrecr0;
if (!model->B4SOIpisbjtGiven)
model->B4SOIpisbjt = 0.0;
if (!model->B4SOIpidbjtGiven)
model->B4SOIpidbjt = model->B4SOIpisbjt;
if (!model->B4SOIpisdifGiven)
model->B4SOIpisdif = 0.0;
if (!model->B4SOIpiddifGiven)
model->B4SOIpiddif = model->B4SOIpisdif; /* v4.0 */
if (!model->B4SOIpisrecGiven)
model->B4SOIpisrec = 0.0;
if (!model->B4SOIpidrecGiven)
model->B4SOIpidrec = model->B4SOIpisrec;
if (!model->B4SOIpistunGiven)
model->B4SOIpistun = 0.0;
if (!model->B4SOIpidtunGiven)
model->B4SOIpidtun = model->B4SOIpistun;
if (!model->B4SOIpvrec0Given) /* v4.0 */
model->B4SOIpvrec0 = 0.0;
if (!model->B4SOIpvrec0dGiven) /* v4.0 */
model->B4SOIpvrec0d = model->B4SOIpvrec0;
if (!model->B4SOIpvtun0Given) /* v4.0 */
model->B4SOIpvtun0 = 0.0;
if (!model->B4SOIpvtun0dGiven) /* v4.0 */
model->B4SOIpvtun0d = model->B4SOIpvtun0;
if (!model->B4SOIpnbjtGiven)
model->B4SOIpnbjt = 0.0;
if (!model->B4SOIplbjt0Given)
model->B4SOIplbjt0 = 0.0;
if (!model->B4SOIpvabjtGiven)
model->B4SOIpvabjt = 0.0;
if (!model->B4SOIpaelyGiven)
model->B4SOIpaely = 0.0;
if (!model->B4SOIpahliGiven) /* v4.0 */
model->B4SOIpahli = 0.0;
if (!model->B4SOIpahlidGiven) /* v4.0 */
model->B4SOIpahlid = model->B4SOIpahli;
/* v3.1 for RF */
if (!model->B4SOIpxrcrg1Given)
model->B4SOIpxrcrg1 =0.0;
if (!model->B4SOIpxrcrg2Given)
model->B4SOIpxrcrg2 =0.0;
/* v3.1 for RF end */
/* CV Model */
if (!model->B4SOIpvsdfbGiven)
model->B4SOIpvsdfb = 0.0;
if (!model->B4SOIpvsdthGiven)
model->B4SOIpvsdth = 0.0;
if (!model->B4SOIpdelvtGiven)
model->B4SOIpdelvt = 0.0;
if (!model->B4SOIpacdeGiven)
model->B4SOIpacde = 0.0;
if (!model->B4SOIpmoinGiven)
model->B4SOIpmoin = 0.0;
if (!model->B4SOIpnoffGiven)
model->B4SOIpnoff = 0.0; /* v3.2 */
/* Added for binning - END */
if (!model->B4SOIcfGiven)
model->B4SOIcf = 2.0 * EPSOX / PI
* log(1.0 + 0.4e-6 / model->B4SOItox);
if (!model->B4SOIcgdoGiven)
{ if (model->B4SOIdlcGiven && (model->B4SOIdlc > 0.0))
{ model->B4SOIcgdo = model->B4SOIdlc * model->B4SOIcox
- model->B4SOIcgdl ;
}
else
model->B4SOIcgdo = 0.6 * model->B4SOIxj * model->B4SOIcox;
}
if (!model->B4SOIcgsoGiven)
{ if (model->B4SOIdlcGiven && (model->B4SOIdlc > 0.0))
{ model->B4SOIcgso = model->B4SOIdlc * model->B4SOIcox
- model->B4SOIcgsl ;
}
else
model->B4SOIcgso = 0.6 * model->B4SOIxj * model->B4SOIcox;
}
if (!model->B4SOIcgeoGiven)
{ model->B4SOIcgeo = 0.0;
}
if (!model->B4SOIxpartGiven)
model->B4SOIxpart = 0.0;
if (!model->B4SOIsheetResistanceGiven)
model->B4SOIsheetResistance = 0.0;
if (!model->B4SOIcsdeswGiven)
model->B4SOIcsdesw = 0.0;
if (!model->B4SOIunitLengthGateSidewallJctCapSGiven) /* v4.0 */
model->B4SOIunitLengthGateSidewallJctCapS = 1e-10;
if (!model->B4SOIunitLengthGateSidewallJctCapDGiven) /* v4.0 */
model->B4SOIunitLengthGateSidewallJctCapD = model->B4SOIunitLengthGateSidewallJctCapS;
if (!model->B4SOIGatesidewallJctSPotentialGiven) /* v4.0 */
model->B4SOIGatesidewallJctSPotential = 0.7;
if (!model->B4SOIGatesidewallJctDPotentialGiven) /* v4.0 */
model->B4SOIGatesidewallJctDPotential = model->B4SOIGatesidewallJctSPotential;
if (!model->B4SOIbodyJctGateSideSGradingCoeffGiven) /* v4.0 */
model->B4SOIbodyJctGateSideSGradingCoeff = 0.5;
if (!model->B4SOIbodyJctGateSideDGradingCoeffGiven) /* v4.0 */
model->B4SOIbodyJctGateSideDGradingCoeff = model->B4SOIbodyJctGateSideSGradingCoeff;
if (!model->B4SOIoxideTrapDensityAGiven)
{ if (model->B4SOItype == NMOS)
model->B4SOIoxideTrapDensityA = 6.25e41;
else
model->B4SOIoxideTrapDensityA=6.188e40;
}
if (!model->B4SOIoxideTrapDensityBGiven)
{ if (model->B4SOItype == NMOS)
model->B4SOIoxideTrapDensityB = 3.125e26;
else
model->B4SOIoxideTrapDensityB = 1.5e25;
}
if (!model->B4SOIoxideTrapDensityCGiven)
model->B4SOIoxideTrapDensityC = 8.75e9;
if (!model->B4SOIemGiven)
model->B4SOIem = 4.1e7; /* V/m */
if (!model->B4SOIefGiven)
model->B4SOIef = 1.0;
if (!model->B4SOIafGiven)
model->B4SOIaf = 1.0;
if (!model->B4SOIkfGiven)
model->B4SOIkf = 0.0;
if (!model->B4SOInoifGiven)
model->B4SOInoif = 1.0;
if (!model->B4SOIbfGiven) /* v4.0 */
model->B4SOIbf = 2.0;
if (!model->B4SOIw0flkGiven) /* v4.0 */
model->B4SOIw0flk = 10.0e-6;
if (!model->B4SOIfrbodyGiven) /* v4.0 */
model->B4SOIfrbody = 1;
if (!model->B4SOIdvtp0Given) /* v4.0 for Vth */
model->B4SOIdvtp0 = 0.0;
if (!model->B4SOIdvtp1Given) /* v4.0 for Vth */
model->B4SOIdvtp1 = 0.0;
if (!model->B4SOIdvtp2Given) /* v4.1 for Vth */
model->B4SOIdvtp2 = 0.0;
if (!model->B4SOIdvtp3Given) /* v4.1 for Vth */
model->B4SOIdvtp3 = 0.0;
if (!model->B4SOIdvtp4Given) /* v4.1 for Vth */
model->B4SOIdvtp4 = 0.0;
if (!model->B4SOIldvtp0Given) /* v4.0 for Vth */
model->B4SOIldvtp0 = 0.0;
if (!model->B4SOIldvtp1Given) /* v4.0 for Vth */
model->B4SOIldvtp1 = 0.0;
if (!model->B4SOIldvtp2Given) /* v4.1 for Vth */
model->B4SOIldvtp2 = 0.0;
if (!model->B4SOIldvtp3Given) /* v4.1 for Vth */
model->B4SOIldvtp3 = 0.0;
if (!model->B4SOIldvtp4Given) /* v4.1 for Vth */
model->B4SOIldvtp4 = 0.0;
if (!model->B4SOIwdvtp0Given) /* v4.0 for Vth */
model->B4SOIwdvtp0 = 0.0;
if (!model->B4SOIwdvtp1Given) /* v4.0 for Vth */
model->B4SOIwdvtp1 = 0.0;
if (!model->B4SOIwdvtp2Given) /* v4.1 for Vth */
model->B4SOIwdvtp2 = 0.0;
if (!model->B4SOIwdvtp3Given) /* v4.1 for Vth */
model->B4SOIwdvtp3 = 0.0;
if (!model->B4SOIwdvtp4Given) /* v4.1 for Vth */
model->B4SOIwdvtp4 = 0.0;
if (!model->B4SOIpdvtp0Given) /* v4.0 for Vth */
model->B4SOIpdvtp0 = 0.0;
if (!model->B4SOIpdvtp1Given) /* v4.0 for Vth */
model->B4SOIpdvtp1 = 0.0;
if (!model->B4SOIpdvtp2Given) /* v4.1 for Vth */
model->B4SOIpdvtp2 = 0.0;
if (!model->B4SOIpdvtp3Given) /* v4.1 for Vth */
model->B4SOIpdvtp3 = 0.0;
if (!model->B4SOIpdvtp4Given) /* v4.1 for Vth */
model->B4SOIpdvtp4 = 0.0;
if (!model->B4SOIminvGiven) /* v4.0 for Vgsteff */
model->B4SOIminv = 0.0;
if (!model->B4SOIlminvGiven) /* v4.0 for Vgsteff */
model->B4SOIlminv = 0.0;
if (!model->B4SOIwminvGiven) /* v4.0 for Vgsteff */
model->B4SOIwminv = 0.0;
if (!model->B4SOIpminvGiven) /* v4.0 for Vgsteff */
model->B4SOIpminv = 0.0;
if (!model->B4SOIfproutGiven) /* v4.0 for DITS in Id */
model->B4SOIfprout = 0.0;
if (!model->B4SOIpditsGiven)
model->B4SOIpdits = 1e-20;
if (!model->B4SOIpditsdGiven)
model->B4SOIpditsd = 0.0;
if (!model->B4SOIpditslGiven)
model->B4SOIpditsl = 0.0;
if (!model->B4SOIlfproutGiven)
model->B4SOIlfprout = 0.0;
if (!model->B4SOIlpditsGiven)
model->B4SOIlpdits = 0.0;
if (!model->B4SOIlpditsdGiven)
model->B4SOIlpditsd = 0.0;
if (!model->B4SOIwfproutGiven)
model->B4SOIwfprout = 0.0;
if (!model->B4SOIwpditsGiven)
model->B4SOIwpdits = 0.0;
if (!model->B4SOIwpditsdGiven)
model->B4SOIwpditsd = 0.0;
if (!model->B4SOIpfproutGiven)
model->B4SOIpfprout = 0.0;
if (!model->B4SOIppditsGiven)
model->B4SOIppdits = 0.0;
if (!model->B4SOIppditsdGiven)
model->B4SOIppditsd = 0.0;
/* v4.0 stress effect */
if (!model->B4SOIsarefGiven)
model->B4SOIsaref = 1e-6; /* m */
if (!model->B4SOIsbrefGiven)
model->B4SOIsbref = 1e-6; /* m */
if (!model->B4SOIwlodGiven)
model->B4SOIwlod = 0; /* m */
if (!model->B4SOIku0Given)
model->B4SOIku0 = 0; /* 1/m */
if (!model->B4SOIkvsatGiven)
model->B4SOIkvsat = 0;
if (!model->B4SOIkvth0Given) /* m */
model->B4SOIkvth0 = 0;
if (!model->B4SOItku0Given)
model->B4SOItku0 = 0;
if (!model->B4SOIllodku0Given)
model->B4SOIllodku0 = 0;
if (!model->B4SOIwlodku0Given)
model->B4SOIwlodku0 = 0;
if (!model->B4SOIllodvthGiven)
model->B4SOIllodvth = 0;
if (!model->B4SOIwlodvthGiven)
model->B4SOIwlodvth = 0;
if (!model->B4SOIlku0Given)
model->B4SOIlku0 = 0;
if (!model->B4SOIwku0Given)
model->B4SOIwku0 = 0;
if (!model->B4SOIpku0Given)
model->B4SOIpku0 = 0;
if (!model->B4SOIlkvth0Given)
model->B4SOIlkvth0 = 0;
if (!model->B4SOIwkvth0Given)
model->B4SOIwkvth0 = 0;
if (!model->B4SOIpkvth0Given)
model->B4SOIpkvth0 = 0;
if (!model->B4SOIstk2Given)
model->B4SOIstk2 = 0;
if (!model->B4SOIlodk2Given)
model->B4SOIlodk2 = 1.0;
if (!model->B4SOIsteta0Given)
model->B4SOIsteta0 = 0;
if (!model->B4SOIlodeta0Given)
model->B4SOIlodeta0 = 1.0;
/* stress effect end */
if (!model->B4SOIvgsMaxGiven)
model->B4SOIvgsMax = 1e99;
if (!model->B4SOIvgdMaxGiven)
model->B4SOIvgdMax = 1e99;
if (!model->B4SOIvgbMaxGiven)
model->B4SOIvgbMax = 1e99;
if (!model->B4SOIvdsMaxGiven)
model->B4SOIvdsMax = 1e99;
if (!model->B4SOIvbsMaxGiven)
model->B4SOIvbsMax = 1e99;
if (!model->B4SOIvbdMaxGiven)
model->B4SOIvbdMax = 1e99;
if (!model->B4SOIvgsrMaxGiven)
model->B4SOIvgsrMax = 1e99;
if (!model->B4SOIvgdrMaxGiven)
model->B4SOIvgdrMax = 1e99;
if (!model->B4SOIvgbrMaxGiven)
model->B4SOIvgbrMax = 1e99;
if (!model->B4SOIvbsrMaxGiven)
model->B4SOIvbsrMax = 1e99;
if (!model->B4SOIvbdrMaxGiven)
model->B4SOIvbdrMax = 1e99;
if (!model->B4SOIfdModGiven)
model->B4SOIfdMod = 0;
if (!model->B4SOIvsceGiven)
model->B4SOIvsce = 0.0;
if (!model->B4SOIcdsbsGiven)
model->B4SOIcdsbs = 0.0;
if (!model->B4SOIminvcvGiven) /* v4.1 for Vgsteffcv */
model->B4SOIminvcv = 0.0;
if (!model->B4SOIlminvcvGiven) /* v4.1 for Vgsteffcv */
model->B4SOIlminvcv = 0.0;
if (!model->B4SOIwminvcvGiven) /* v4.1 for Vgsteffcv */
model->B4SOIwminvcv = 0.0;
if (!model->B4SOIpminvcvGiven) /* v4.1 for Vgsteffcv */
model->B4SOIpminvcv = 0.0;
if (!model->B4SOIvoffcvGiven)
/*model->B4SOIvoffcv = -0.08; v4.2 */
model->B4SOIvoffcv = 0.0;
if (!model->B4SOIlvoffcvGiven)
model->B4SOIlvoffcv = 0.0;
if (!model->B4SOIwvoffcvGiven)
model->B4SOIwvoffcv = 0.0;
if (!model->B4SOIpvoffcvGiven)
model->B4SOIpvoffcv = 0.0;
/* loop through all the instances of the model */
for (here = model->B4SOIinstances; here != NULL ;
here=here->B4SOInextInstance)
{ /* allocate a chunk of the state vector */
here->B4SOIstates = *states;
*states += B4SOInumStates;
/* perform the parameter defaulting */
if (!here->B4SOIdrainAreaGiven)
here->B4SOIdrainArea = 0.0;
if (!here->B4SOIdrainPerimeterGiven)
here->B4SOIdrainPerimeter = 0.0;
if (!here->B4SOIdrainSquaresGiven)
here->B4SOIdrainSquares = 1.0;
if (!here->B4SOIicVBSGiven)
here->B4SOIicVBS = 0;
if (!here->B4SOIicVDSGiven)
here->B4SOIicVDS = 0;
if (!here->B4SOIicVGSGiven)
here->B4SOIicVGS = 0;
if (!here->B4SOIicVESGiven)
here->B4SOIicVES = 0;
if (!here->B4SOIicVPSGiven)
here->B4SOIicVPS = 0;
if (!here->B4SOIbjtoffGiven)
here->B4SOIbjtoff = 0;
if (!here->B4SOIdebugModGiven)
here->B4SOIdebugMod = 0;
if (!here->B4SOIrth0Given)
here->B4SOIrth0 = model->B4SOIrth0;
if (!here->B4SOIcth0Given)
here->B4SOIcth0 = model->B4SOIcth0;
if (!here->B4SOIbodySquaresGiven)
here->B4SOIbodySquares = 1.0;
if (!here->B4SOIfrbodyGiven)
here->B4SOIfrbody = model->B4SOIfrbody; /* v4.0 */
if (!here->B4SOIlGiven)
here->B4SOIl = 5e-6;
if (!here->B4SOIsourceAreaGiven)
here->B4SOIsourceArea = 0;
if (!here->B4SOIsourcePerimeterGiven)
here->B4SOIsourcePerimeter = 0;
if (!here->B4SOIsourceSquaresGiven)
here->B4SOIsourceSquares = 1;
if (!here->B4SOIwGiven)
here->B4SOIw = 5e-6;
if (!here->B4SOImGiven)
here->B4SOIm = 1;
/* v2.0 release */
if (!here->B4SOInbcGiven)
here->B4SOInbc = 0;
if (!here->B4SOInsegGiven)
here->B4SOInseg = 1;
if (!here->B4SOIpdbcpGiven)
here->B4SOIpdbcp = 0;
if (!here->B4SOIpsbcpGiven)
here->B4SOIpsbcp = 0;
if (!here->B4SOIagbcpGiven)
here->B4SOIagbcp = 0;
if (!here->B4SOIagbcp2Given)
here->B4SOIagbcp2 = 0; /* v4.1 */
if (!here->B4SOIagbcpdGiven)
here->B4SOIagbcpd = here->B4SOIagbcp;
if (!here->B4SOIaebcpGiven)
here->B4SOIaebcp = 0;
if (!here->B4SOIoffGiven)
here->B4SOIoff = 0;
/* process drain series resistance */
if ( ((model->B4SOIsheetResistance > 0.0) &&
(here->B4SOIdrainSquares > 0.0 ) &&
(here->B4SOIdNodePrime == 0)) )
{ error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"drain");
if(error) return(error);
here->B4SOIdNodePrime = tmp->number;
}
else
{ here->B4SOIdNodePrime = here->B4SOIdNode;
}
/* process source series resistance */
if ( ((model->B4SOIsheetResistance > 0.0) &&
(here->B4SOIsourceSquares > 0.0 ) &&
(here->B4SOIsNodePrime == 0)) )
{ error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"source");
if(error) return(error);
here->B4SOIsNodePrime = tmp->number;
}
else
{ here->B4SOIsNodePrime = here->B4SOIsNode;
}
/* v4.4 -- Check of TsiMax for SOIMOD = 2 */
if (model->B4SOIsoiMod == 2){
if (model->B4SOImtrlMod){
NchMax = (model->B4SOIbg0sub - 0.1) / Charge_q * 2.0e-6 * epssub / (model->B4SOIetsi * model->B4SOIetsi);
if (model->B4SOInpeak > NchMax ){
printf("Warning: SOIMOD=2 can not support given Nch=%g cm^-3 and Etsi=%g m. \n ", model->B4SOInpeak, model->B4SOIetsi);
printf("Exceeds maximum allowed band bending of (Eg-0.1)eV. \n");
printf("Nch is set to %g cm^-3. \n",NchMax);
model->B4SOInpeak = NchMax;
}
} else {
NchMax = (1.12 - 0.1) / Charge_q * 2.0e-6 * epssub / (model->B4SOItsi * model->B4SOItsi);
if (model->B4SOInpeak > NchMax ) {
printf("Warning: SOIMOD=2 can not support given Nch=%g cm^-3 and Tsi=%g m. \n", model->B4SOInpeak, model->B4SOItsi);
printf("Exceeds maximum allowed band bending of (Eg-0.1)eV. \n");
printf("Nch is set to %g cm^-3. \n",NchMax);
model->B4SOInpeak = NchMax;
}
}
}
/* process effective silicon film thickness */
model->B4SOIcbox = 3.453133e-11 / model->B4SOItbox;
if(model->B4SOImtrlMod)
{
model->B4SOIcsi = 1.03594e-10 / model->B4SOIetsi;
}
else
{
model->B4SOIcsi = 1.03594e-10 / model->B4SOItsi;
}
Cboxt = model->B4SOIcbox * model->B4SOIcsi / (model->B4SOIcbox + model->B4SOIcsi);
/* v3.2 */
if(model->B4SOImtrlMod)
{
Qsi = Charge_q * model->B4SOInpeak
* (1.0 + model->B4SOIlpe0 / here->B4SOIl) * 1e6 * model->B4SOIetsi;
}
else
{
Qsi = Charge_q * model->B4SOInpeak
* (1.0 + model->B4SOIlpe0 / here->B4SOIl) * 1e6 * model->B4SOItsi;
}
Vbs0t = 0.8 - 0.5 * Qsi / model->B4SOIcsi + model->B4SOIvbsa;
if (!here->B4SOIsoiModGiven)
here->B4SOIsoiMod = model->B4SOIsoiMod;
else if ((here->B4SOIsoiMod != 0) && (here->B4SOIsoiMod != 1)
&& (here->B4SOIsoiMod != 2) && (here->B4SOIsoiMod != 3))
{ here->B4SOIsoiMod = model->B4SOIsoiMod;
printf("Warning: soiMod has been set to its global value %d.\n", model->B4SOIsoiMod);
}
if (here->B4SOIsoiMod == 3) { /* auto selection */
if (Vbs0t > model->B4SOIvbs0fd)
here->B4SOIsoiMod = 2; /* ideal FD mode */
else {
if (Vbs0t < model->B4SOIvbs0pd)
here->B4SOIsoiMod = 0; /* BSIMPD */
else
here->B4SOIsoiMod = 1;
}
}
here->B4SOIfloat = 0;
if (here->B4SOIsoiMod == 2) /* v3.2 */
{
here->B4SOIbNode = here->B4SOIpNode = 0;
here->B4SOIbodyMod = 0;
} /* For ideal FD, body contact is disabled and no body node */
else
{
if (here->B4SOIpNode == -1) { /* floating body case -- 4-node */
error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"Body");
if (error) return(error);
here->B4SOIbNode = tmp->number;
here->B4SOIpNode = 0;
here->B4SOIfloat = 1;
here->B4SOIbodyMod = 0;
}
else /* the 5th Node has been assigned */
{
if (!here->B4SOItnodeoutGiven) { /* if t-node not assigned */
if (here->B4SOIbNode == -1)
{ /* 5-node body tie, bNode has not been assigned */
if ((model->B4SOIrbody == 0.0) && (model->B4SOIrbsh == 0.0))
{ /* ideal body tie, pNode is not used */
here->B4SOIbNode = here->B4SOIpNode;
here->B4SOIbodyMod = 2;
}
else { /* nonideal body tie */
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Body");
if (error) return(error);
here->B4SOIbNode = tmp->number;
here->B4SOIbodyMod = 1;
}
}
else { /* 6-node body tie, bNode has been assigned */
if ((model->B4SOIrbody == 0.0) && (model->B4SOIrbsh == 0.0))
{
printf("\n Warning: model parameter rbody=0!\n");
model->B4SOIrbody = 1e0;
here->B4SOIbodyMod = 1;
}
else { /* nonideal body tie */
here->B4SOIbodyMod = 1;
}
}
}
else { /* t-node assigned */
if (here->B4SOIbNode == -1)
{ /* 4 nodes & t-node, floating body */
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Body");
if (error) return(error);
here->B4SOIbNode = tmp->number;
here->B4SOItempNode = here->B4SOIpNode;
here->B4SOIpNode = 0;
here->B4SOIfloat = 1;
here->B4SOIbodyMod = 0;
}
else { /* 5 or 6 nodes & t-node, body-contact device */
if (here->B4SOItempNode == -1) { /* 5 nodes & tnode */
if ((model->B4SOIrbody == 0.0) && (model->B4SOIrbsh == 0.0))
{ /* ideal body tie, pNode is not used */
here->B4SOItempNode = here->B4SOIbNode;
here->B4SOIbNode = here->B4SOIpNode;
here->B4SOIbodyMod = 2;
}
else { /* nonideal body tie */
here->B4SOItempNode = here->B4SOIbNode;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Body");
if (error) return(error);
here->B4SOIbNode = tmp->number;
here->B4SOIbodyMod = 1;
}
}
else { /* 6 nodes & t-node */
if ((model->B4SOIrbody == 0.0) && (model->B4SOIrbsh == 0.0))
{
printf("\n Warning: model parameter rbody=0!\n");
model->B4SOIrbody = 1e0;
here->B4SOIbodyMod = 1;
}
else { /* nonideal body tie */
here->B4SOIbodyMod = 1;
}
}
}
}
}
}
if ((model->B4SOIshMod == 1) && (here->B4SOIrth0!=0))
{
if (here->B4SOItempNode == -1) {
error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"Temp");
if (error) return(error);
here->B4SOItempNode = tmp->number;
}
} else {
here->B4SOItempNode = 0;
}
/* v3.1 added for RF */
if (!here->B4SOIrgateModGiven)
here->B4SOIrgateMod = model->B4SOIrgateMod;
else if ((here->B4SOIrgateMod != 0) && (here->B4SOIrgateMod != 1)
&& (here->B4SOIrgateMod != 2) && (here->B4SOIrgateMod != 3))
{ here->B4SOIrgateMod = model->B4SOIrgateMod;
printf("Warning: rgateMod has been set to its global value %d.\n", model->B4SOIrgateMod);
}
if (here->B4SOIrgateMod > 0)
{ error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"gate");
if(error) return(error);
here->B4SOIgNode = tmp->number;
if (here->B4SOIrgateMod == 1)
{ if (model->B4SOIrshg <= 0.0)
printf("Warning: rshg should be positive for rgateMod = 1.\n");
}
else if (here->B4SOIrgateMod == 2)
{ if (model->B4SOIrshg <= 0.0)
printf("Warning: rshg <= 0.0 for rgateMod = 2!!!\n");
else if (model->B4SOIxrcrg1 <= 0.0)
printf("Warning: xrcrg1 <= 0.0 for rgateMod = 2!!!\n");
}
}
else
{
here->B4SOIgNode = here->B4SOIgNodeExt;
}
if (here->B4SOIrgateMod == 3)
{ error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"midgate");
if(error) return(error);
here->B4SOIgNodeMid = tmp->number;
if (model->B4SOIrshg <= 0.0)
printf("Warning: rshg should be positive for rgateMod = 3.\n");
else if (model->B4SOIxrcrg1 <= 0.0)
printf("Warning: xrcrg1 should be positive for rgateMod = 3. \n");
}
else
here->B4SOIgNodeMid = here->B4SOIgNodeExt;
/* v3.1 added for RF end */
/* v4.0 */
if (!here->B4SOIrbodyModGiven)
here->B4SOIrbodyMod = model->B4SOIrbodyMod;
else if ((here->B4SOIrbodyMod != 0) && (here->B4SOIrbodyMod != 1))
{ here->B4SOIrbodyMod = model->B4SOIrbodyMod;
printf("Warning: rbodyMod has been set to its global value %d. \n", model->B4SOIrbodyMod);
}
if (here->B4SOIrbodyMod ==1 && here->B4SOIsoiMod == 2) /* v4.0 */
here->B4SOIrbodyMod = 0;
if (here->B4SOIrbodyMod == 1)
{ if (here->B4SOIdbNode == 0)
{ error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"dbody");
if(error) return(error);
here->B4SOIdbNode = tmp->number;
}
if (here->B4SOIsbNode == 0)
{ error = CKTmkVolt(ckt,&tmp,here->B4SOIname,"sbody");
if(error) return(error);
here->B4SOIsbNode = tmp->number;
}
}
else
here->B4SOIdbNode = here->B4SOIsbNode
= here->B4SOIbNode;
/* v4.0 end */
/* v4.0 added */
if (!here->B4SOIsaGiven) /* stress */
here->B4SOIsa = 0.0;
if (!here->B4SOIsbGiven)
here->B4SOIsb = 0.0;
if (!here->B4SOIsdGiven)
here->B4SOIsd = 0.0;
if (!here->B4SOInfGiven)
here->B4SOInf = 1.0;
if (!here->B4SOIrbdbGiven)
here->B4SOIrbdb = model->B4SOIrbdb; /* in ohm */
if (!here->B4SOIrbsbGiven)
here->B4SOIrbsb = model->B4SOIrbsb;
if (!here->B4SOIdelvtoGiven)
here->B4SOIdelvto = 0.0;
/* v4.0 added end */
/* here for debugging purpose only */
if (here->B4SOIdebugMod != 0)
{
/* The real Vbs value */
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Vbs");
if(error) return(error);
here->B4SOIvbsNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ids");
if(error) return(error);
here->B4SOIidsNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ic");
if(error) return(error);
here->B4SOIicNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ibs");
if(error) return(error);
here->B4SOIibsNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ibd");
if(error) return(error);
here->B4SOIibdNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Iii");
if(error) return(error);
here->B4SOIiiiNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ig");
if(error) return(error);
here->B4SOIigNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Gigg");
if(error) return(error);
here->B4SOIgiggNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Gigd");
if(error) return(error);
here->B4SOIgigdNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Gigb");
if(error) return(error);
here->B4SOIgigbNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Igidl");
if(error) return(error);
here->B4SOIigidlNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Itun");
if(error) return(error);
here->B4SOIitunNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Ibp");
if(error) return(error);
here->B4SOIibpNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Cbb");
if(error) return(error);
here->B4SOIcbbNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Cbd");
if(error) return(error);
here->B4SOIcbdNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Cbg");
if(error) return(error);
here->B4SOIcbgNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Qbf");
if(error) return(error);
here->B4SOIqbfNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Qjs");
if(error) return(error);
here->B4SOIqjsNode = tmp->number;
error = CKTmkVolt(ckt, &tmp, here->B4SOIname, "Qjd");
if(error) return(error);
here->B4SOIqjdNode = tmp->number;
}
/* set Sparse Matrix Pointers */
/* macro to make elements with built in test for out of memory */
#define TSTALLOC(ptr,first,second) \
do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\
return(E_NOMEM);\
} } while(0)
if ((model->B4SOIshMod == 1) && (here->B4SOIrth0!=0.0)) {
TSTALLOC(B4SOITemptempPtr, B4SOItempNode, B4SOItempNode);
TSTALLOC(B4SOITempdpPtr, B4SOItempNode, B4SOIdNodePrime);
TSTALLOC(B4SOITempspPtr, B4SOItempNode, B4SOIsNodePrime);
TSTALLOC(B4SOITempgPtr, B4SOItempNode, B4SOIgNode);
TSTALLOC(B4SOITempbPtr, B4SOItempNode, B4SOIbNode);
TSTALLOC(B4SOIGtempPtr, B4SOIgNode, B4SOItempNode);
TSTALLOC(B4SOIDPtempPtr, B4SOIdNodePrime, B4SOItempNode);
TSTALLOC(B4SOISPtempPtr, B4SOIsNodePrime, B4SOItempNode);
TSTALLOC(B4SOIEtempPtr, B4SOIeNode, B4SOItempNode);
TSTALLOC(B4SOIBtempPtr, B4SOIbNode, B4SOItempNode);
if (here->B4SOIbodyMod == 1) {
TSTALLOC(B4SOIPtempPtr, B4SOIpNode, B4SOItempNode);
}
/* v3.0 */
if (here->B4SOIsoiMod != 0) { /* v3.2 */
TSTALLOC(B4SOITempePtr, B4SOItempNode, B4SOIeNode);
}
}
if (here->B4SOIbodyMod == 2) {
/* Don't create any Jacobian entry for pNode */
}
else if (here->B4SOIbodyMod == 1) {
TSTALLOC(B4SOIBpPtr, B4SOIbNode, B4SOIpNode);
TSTALLOC(B4SOIPbPtr, B4SOIpNode, B4SOIbNode);
TSTALLOC(B4SOIPpPtr, B4SOIpNode, B4SOIpNode);
/* 4.1 for Igb2_agbcp2 */
TSTALLOC(B4SOIPgPtr , B4SOIpNode, B4SOIgNode);
TSTALLOC(B4SOIGpPtr , B4SOIgNode, B4SOIpNode);
}
/* v3.1 added for RF */
if (here->B4SOIrgateMod != 0)
{ TSTALLOC(B4SOIGEgePtr, B4SOIgNodeExt, B4SOIgNodeExt);
TSTALLOC(B4SOIGEgPtr, B4SOIgNodeExt, B4SOIgNode);
TSTALLOC(B4SOIGgePtr, B4SOIgNode, B4SOIgNodeExt);
TSTALLOC(B4SOIGEdpPtr, B4SOIgNodeExt, B4SOIdNodePrime);
TSTALLOC(B4SOIGEspPtr, B4SOIgNodeExt, B4SOIsNodePrime);
if (here->B4SOIsoiMod !=2) /* v3.2 */
TSTALLOC(B4SOIGEbPtr, B4SOIgNodeExt, B4SOIbNode);
TSTALLOC(B4SOIGMdpPtr, B4SOIgNodeMid, B4SOIdNodePrime);
TSTALLOC(B4SOIGMgPtr, B4SOIgNodeMid, B4SOIgNode);
TSTALLOC(B4SOIGMgmPtr, B4SOIgNodeMid, B4SOIgNodeMid);
TSTALLOC(B4SOIGMgePtr, B4SOIgNodeMid, B4SOIgNodeExt);
TSTALLOC(B4SOIGMspPtr, B4SOIgNodeMid, B4SOIsNodePrime);
if (here->B4SOIsoiMod !=2) /* v3.2 */
TSTALLOC(B4SOIGMbPtr, B4SOIgNodeMid, B4SOIbNode);
TSTALLOC(B4SOIGMePtr, B4SOIgNodeMid, B4SOIeNode);
TSTALLOC(B4SOIDPgmPtr, B4SOIdNodePrime, B4SOIgNodeMid);
TSTALLOC(B4SOIGgmPtr, B4SOIgNode, B4SOIgNodeMid);
TSTALLOC(B4SOIGEgmPtr, B4SOIgNodeExt, B4SOIgNodeMid);
TSTALLOC(B4SOISPgmPtr, B4SOIsNodePrime, B4SOIgNodeMid);
TSTALLOC(B4SOIEgmPtr, B4SOIeNode, B4SOIgNodeMid);
}
/* v3.1 added for RF end */
/* v3.1 */
if (here->B4SOIsoiMod != 2) /* v3.2 */
{
TSTALLOC(B4SOIEbPtr, B4SOIeNode, B4SOIbNode);
TSTALLOC(B4SOIGbPtr, B4SOIgNode, B4SOIbNode);
TSTALLOC(B4SOIDPbPtr, B4SOIdNodePrime, B4SOIbNode);
TSTALLOC(B4SOISPbPtr, B4SOIsNodePrime, B4SOIbNode);
TSTALLOC(B4SOIBePtr, B4SOIbNode, B4SOIeNode);
TSTALLOC(B4SOIBgPtr, B4SOIbNode, B4SOIgNode);
TSTALLOC(B4SOIBdpPtr, B4SOIbNode, B4SOIdNodePrime);
TSTALLOC(B4SOIBspPtr, B4SOIbNode, B4SOIsNodePrime);
TSTALLOC(B4SOIBbPtr, B4SOIbNode, B4SOIbNode);
}
/* v3.1 */
TSTALLOC(B4SOIEgPtr, B4SOIeNode, B4SOIgNode);
TSTALLOC(B4SOIEdpPtr, B4SOIeNode, B4SOIdNodePrime);
TSTALLOC(B4SOIEspPtr, B4SOIeNode, B4SOIsNodePrime);
TSTALLOC(B4SOIGePtr, B4SOIgNode, B4SOIeNode);
TSTALLOC(B4SOIDPePtr, B4SOIdNodePrime, B4SOIeNode);
TSTALLOC(B4SOISPePtr, B4SOIsNodePrime, B4SOIeNode);
TSTALLOC(B4SOIEePtr, B4SOIeNode, B4SOIeNode);
TSTALLOC(B4SOIGgPtr, B4SOIgNode, B4SOIgNode);
TSTALLOC(B4SOIGdpPtr, B4SOIgNode, B4SOIdNodePrime);
TSTALLOC(B4SOIGspPtr, B4SOIgNode, B4SOIsNodePrime);
TSTALLOC(B4SOIDPgPtr, B4SOIdNodePrime, B4SOIgNode);
TSTALLOC(B4SOIDPdpPtr, B4SOIdNodePrime, B4SOIdNodePrime);
TSTALLOC(B4SOIDPspPtr, B4SOIdNodePrime, B4SOIsNodePrime);
TSTALLOC(B4SOIDPdPtr, B4SOIdNodePrime, B4SOIdNode);
TSTALLOC(B4SOISPgPtr, B4SOIsNodePrime, B4SOIgNode);
TSTALLOC(B4SOISPdpPtr, B4SOIsNodePrime, B4SOIdNodePrime);
TSTALLOC(B4SOISPspPtr, B4SOIsNodePrime, B4SOIsNodePrime);
TSTALLOC(B4SOISPsPtr, B4SOIsNodePrime, B4SOIsNode);
TSTALLOC(B4SOIDdPtr, B4SOIdNode, B4SOIdNode);
TSTALLOC(B4SOIDdpPtr, B4SOIdNode, B4SOIdNodePrime);
TSTALLOC(B4SOISsPtr, B4SOIsNode, B4SOIsNode);
TSTALLOC(B4SOISspPtr, B4SOIsNode, B4SOIsNodePrime);
/* v4.0 */
if (here->B4SOIrbodyMod == 1)
{ TSTALLOC(B4SOIDPdbPtr, B4SOIdNodePrime, B4SOIdbNode);
TSTALLOC(B4SOISPsbPtr, B4SOIsNodePrime, B4SOIsbNode);
TSTALLOC(B4SOIDBdpPtr, B4SOIdbNode, B4SOIdNodePrime);
TSTALLOC(B4SOIDBdbPtr, B4SOIdbNode, B4SOIdbNode);
TSTALLOC(B4SOIDBbPtr, B4SOIdbNode, B4SOIbNode);
TSTALLOC(B4SOISBspPtr, B4SOIsbNode, B4SOIsNodePrime);
TSTALLOC(B4SOISBsbPtr, B4SOIsbNode, B4SOIsbNode);
TSTALLOC(B4SOISBbPtr, B4SOIsbNode, B4SOIbNode);
TSTALLOC(B4SOIBdbPtr, B4SOIbNode, B4SOIdbNode);
TSTALLOC(B4SOIBsbPtr, B4SOIbNode, B4SOIsbNode);
}
if (model->B4SOIrdsMod)
{ TSTALLOC(B4SOIDgPtr, B4SOIdNode, B4SOIgNode);
TSTALLOC(B4SOIDspPtr, B4SOIdNode, B4SOIsNodePrime);
TSTALLOC(B4SOISdpPtr, B4SOIsNode, B4SOIdNodePrime);
TSTALLOC(B4SOISgPtr, B4SOIsNode, B4SOIgNode);
if (model->B4SOIsoiMod != 2) {
TSTALLOC(B4SOIDbPtr, B4SOIdNode, B4SOIbNode);
TSTALLOC(B4SOISbPtr, B4SOIsNode, B4SOIbNode);
}
}
/* v4.0 end*/
/* here for debugging purpose only */
if (here->B4SOIdebugMod != 0)
{
TSTALLOC(B4SOIVbsPtr, B4SOIvbsNode, B4SOIvbsNode);
TSTALLOC(B4SOIIdsPtr, B4SOIidsNode, B4SOIidsNode);
TSTALLOC(B4SOIIcPtr, B4SOIicNode, B4SOIicNode);
TSTALLOC(B4SOIIbsPtr, B4SOIibsNode, B4SOIibsNode);
TSTALLOC(B4SOIIbdPtr, B4SOIibdNode, B4SOIibdNode);
TSTALLOC(B4SOIIiiPtr, B4SOIiiiNode, B4SOIiiiNode);
TSTALLOC(B4SOIIgPtr, B4SOIigNode, B4SOIigNode);
TSTALLOC(B4SOIGiggPtr, B4SOIgiggNode, B4SOIgiggNode);
TSTALLOC(B4SOIGigdPtr, B4SOIgigdNode, B4SOIgigdNode);
TSTALLOC(B4SOIGigbPtr, B4SOIgigbNode, B4SOIgigbNode);
TSTALLOC(B4SOIIgidlPtr, B4SOIigidlNode, B4SOIigidlNode);
TSTALLOC(B4SOIItunPtr, B4SOIitunNode, B4SOIitunNode);
TSTALLOC(B4SOIIbpPtr, B4SOIibpNode, B4SOIibpNode);
TSTALLOC(B4SOICbbPtr, B4SOIcbbNode, B4SOIcbbNode);
TSTALLOC(B4SOICbdPtr, B4SOIcbdNode, B4SOIcbdNode);
TSTALLOC(B4SOICbgPtr, B4SOIcbgNode, B4SOIcbgNode);
TSTALLOC(B4SOIQbfPtr, B4SOIqbfNode, B4SOIqbfNode);
TSTALLOC(B4SOIQjsPtr, B4SOIqjsNode, B4SOIqjsNode);
TSTALLOC(B4SOIQjdPtr, B4SOIqjdNode, B4SOIqjdNode);
}
}
}
#ifdef USE_OMP
InstCount = 0;
model = (B4SOImodel*)inModel;
/* loop through all the B4SOI device models
to count the number of instances */
for( ; model != NULL; model = model->B4SOInextModel )
{
/* loop through all the instances of the model */
for (here = model->B4SOIinstances; here != NULL ;
here=here->B4SOInextInstance)
{
InstCount++;
}
}
InstArray = TMALLOC(B4SOIinstance*, InstCount);
model = (B4SOImodel*)inModel;
idx = 0;
for( ; model != NULL; model = model->B4SOInextModel )
{
/* loop through all the instances of the model */
for (here = model->B4SOIinstances; here != NULL ;
here=here->B4SOInextInstance)
{
InstArray[idx] = here;
idx++;
}
/* set the array pointer and instance count into each model */
model->B4SOIInstCount = InstCount;
model->B4SOIInstanceArray = InstArray;
}
#endif
return(OK);
}
int
B4SOIunsetup(
GENmodel *inModel,
CKTcircuit *ckt)
{
#ifndef HAS_BATCHSIM
B4SOImodel *model;
B4SOIinstance *here;
for (model = (B4SOImodel *)inModel; model != NULL;
model = model->B4SOInextModel)
{
for (here = model->B4SOIinstances; here != NULL;
here=here->B4SOInextInstance)
{
/* here for debugging purpose only */
if (here->B4SOIqjdNode)
{
CKTdltNNum(ckt, here->B4SOIqjdNode);
here->B4SOIqjdNode = 0;
}
if (here->B4SOIqjsNode)
{
CKTdltNNum(ckt, here->B4SOIqjsNode);
here->B4SOIqjsNode = 0;
}
if (here->B4SOIqbfNode)
{
CKTdltNNum(ckt, here->B4SOIqbfNode);
here->B4SOIqbfNode = 0;
}
if (here->B4SOIcbgNode)
{
CKTdltNNum(ckt, here->B4SOIcbgNode);
here->B4SOIcbgNode = 0;
}
if (here->B4SOIcbdNode)
{
CKTdltNNum(ckt, here->B4SOIcbdNode);
here->B4SOIcbdNode = 0;
}
if (here->B4SOIcbbNode)
{
CKTdltNNum(ckt, here->B4SOIcbbNode);
here->B4SOIcbbNode = 0;
}
if (here->B4SOIibpNode)
{
CKTdltNNum(ckt, here->B4SOIibpNode);
here->B4SOIibpNode = 0;
}
if (here->B4SOIitunNode)
{
CKTdltNNum(ckt, here->B4SOIitunNode);
here->B4SOIitunNode = 0;
}
if (here->B4SOIigidlNode)
{
CKTdltNNum(ckt, here->B4SOIigidlNode);
here->B4SOIigidlNode = 0;
}
if (here->B4SOIgigbNode)
{
CKTdltNNum(ckt, here->B4SOIgigbNode);
here->B4SOIgigbNode = 0;
}
if (here->B4SOIgigdNode)
{
CKTdltNNum(ckt, here->B4SOIgigdNode);
here->B4SOIgigdNode = 0;
}
if (here->B4SOIgiggNode)
{
CKTdltNNum(ckt, here->B4SOIgiggNode);
here->B4SOIgiggNode = 0;
}
if (here->B4SOIigNode)
{
CKTdltNNum(ckt, here->B4SOIigNode);
here->B4SOIigNode = 0;
}
if (here->B4SOIiiiNode)
{
CKTdltNNum(ckt, here->B4SOIiiiNode);
here->B4SOIiiiNode = 0;
}
if (here->B4SOIibdNode)
{
CKTdltNNum(ckt, here->B4SOIibdNode);
here->B4SOIibdNode = 0;
}
if (here->B4SOIibsNode)
{
CKTdltNNum(ckt, here->B4SOIibsNode);
here->B4SOIibsNode = 0;
}
if (here->B4SOIicNode)
{
CKTdltNNum(ckt, here->B4SOIicNode);
here->B4SOIicNode = 0;
}
if (here->B4SOIidsNode)
{
CKTdltNNum(ckt, here->B4SOIidsNode);
here->B4SOIidsNode = 0;
}
if (here->B4SOIvbsNode)
{
CKTdltNNum(ckt, here->B4SOIvbsNode);
here->B4SOIvbsNode = 0;
}
if (here->B4SOIsNodePrime
&& here->B4SOIsNodePrime != here->B4SOIsNode)
{
CKTdltNNum(ckt, here->B4SOIsNodePrime);
here->B4SOIsNodePrime = 0;
}
if (here->B4SOIdNodePrime
&& here->B4SOIdNodePrime != here->B4SOIdNode)
{
CKTdltNNum(ckt, here->B4SOIdNodePrime);
here->B4SOIdNodePrime = 0;
}
}
}
#endif
return OK;
}