From 1807ad01796f309d7990208a90f9fe5cc949c1b7 Mon Sep 17 00:00:00 2001 From: dwarning Date: Sat, 17 Nov 2007 22:26:02 +0000 Subject: [PATCH] scale option included --- src/spicelib/devices/bsim3/b3par.c | 17 +++++++++++------ src/spicelib/devices/bsim3v0/b3v0par.c | 17 +++++++++++------ src/spicelib/devices/bsim3v1/b3v1par.c | 17 +++++++++++------ src/spicelib/devices/bsim3v1a/b3v1apar.c | 17 +++++++++++------ src/spicelib/devices/bsim3v1s/b3v1spar.c | 17 +++++++++++------ src/spicelib/devices/bsim4/b4par.c | 17 +++++++++++------ src/spicelib/devices/bsim4v2/b4v2par.c | 1 - 7 files changed, 66 insertions(+), 37 deletions(-) diff --git a/src/spicelib/devices/bsim3/b3par.c b/src/spicelib/devices/bsim3/b3par.c index 3a4e542b2..fd6edcb7d 100644 --- a/src/spicelib/devices/bsim3/b3par.c +++ b/src/spicelib/devices/bsim3/b3par.c @@ -14,18 +14,23 @@ #include "bsim3def.h" #include "sperror.h" #include "suffix.h" +#include "fteext.h" int BSIM3param (int param, IFvalue *value, GENinstance *inst, IFvalue *select) { + double scale; + + if ( !cp_getvar( "scale", CP_REAL, (double*) &scale ) ) scale = 1; + BSIM3instance *here = (BSIM3instance*)inst; switch(param) { case BSIM3_W: - here->BSIM3w = value->rValue; + here->BSIM3w = value->rValue*scale; here->BSIM3wGiven = TRUE; break; case BSIM3_L: - here->BSIM3l = value->rValue; + here->BSIM3l = value->rValue*scale; here->BSIM3lGiven = TRUE; break; case BSIM3_M: @@ -33,19 +38,19 @@ BSIM3param (int param, IFvalue *value, GENinstance *inst, IFvalue *select) here->BSIM3mGiven = TRUE; break; case BSIM3_AS: - here->BSIM3sourceArea = value->rValue; + here->BSIM3sourceArea = value->rValue*scale*scale; here->BSIM3sourceAreaGiven = TRUE; break; case BSIM3_AD: - here->BSIM3drainArea = value->rValue; + here->BSIM3drainArea = value->rValue*scale*scale; here->BSIM3drainAreaGiven = TRUE; break; case BSIM3_PS: - here->BSIM3sourcePerimeter = value->rValue; + here->BSIM3sourcePerimeter = value->rValue*scale; here->BSIM3sourcePerimeterGiven = TRUE; break; case BSIM3_PD: - here->BSIM3drainPerimeter = value->rValue; + here->BSIM3drainPerimeter = value->rValue*scale; here->BSIM3drainPerimeterGiven = TRUE; break; case BSIM3_NRS: diff --git a/src/spicelib/devices/bsim3v0/b3v0par.c b/src/spicelib/devices/bsim3v0/b3v0par.c index f59718e3e..cb0027f6a 100644 --- a/src/spicelib/devices/bsim3v0/b3v0par.c +++ b/src/spicelib/devices/bsim3v0/b3v0par.c @@ -9,18 +9,23 @@ File: b3v0par.c #include "bsim3v0def.h" #include "sperror.h" #include "suffix.h" +#include "fteext.h" int BSIM3v0param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { + double scale; + + if ( !cp_getvar( "scale", CP_REAL, (double*) &scale ) ) scale = 1; + BSIM3v0instance *here = (BSIM3v0instance*)inst; switch(param) { case BSIM3v0_W: - here->BSIM3v0w = value->rValue; + here->BSIM3v0w = value->rValue*scale; here->BSIM3v0wGiven = TRUE; break; case BSIM3v0_L: - here->BSIM3v0l = value->rValue; + here->BSIM3v0l = value->rValue*scale; here->BSIM3v0lGiven = TRUE; break; case BSIM3v0_M: @@ -28,19 +33,19 @@ BSIM3v0param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) here->BSIM3v0mGiven = TRUE; break; case BSIM3v0_AS: - here->BSIM3v0sourceArea = value->rValue; + here->BSIM3v0sourceArea = value->rValue*scale*scale; here->BSIM3v0sourceAreaGiven = TRUE; break; case BSIM3v0_AD: - here->BSIM3v0drainArea = value->rValue; + here->BSIM3v0drainArea = value->rValue*scale*scale; here->BSIM3v0drainAreaGiven = TRUE; break; case BSIM3v0_PS: - here->BSIM3v0sourcePerimeter = value->rValue; + here->BSIM3v0sourcePerimeter = value->rValue*scale; here->BSIM3v0sourcePerimeterGiven = TRUE; break; case BSIM3v0_PD: - here->BSIM3v0drainPerimeter = value->rValue; + here->BSIM3v0drainPerimeter = value->rValue*scale; here->BSIM3v0drainPerimeterGiven = TRUE; break; case BSIM3v0_NRS: diff --git a/src/spicelib/devices/bsim3v1/b3v1par.c b/src/spicelib/devices/bsim3v1/b3v1par.c index 627a2addc..001748a5a 100644 --- a/src/spicelib/devices/bsim3v1/b3v1par.c +++ b/src/spicelib/devices/bsim3v1/b3v1par.c @@ -15,18 +15,23 @@ #include "bsim3v1def.h" #include "sperror.h" #include "suffix.h" +#include "fteext.h" int BSIM3v1param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { + double scale; + + if ( !cp_getvar( "scale", CP_REAL, (double*) &scale ) ) scale = 1; + BSIM3v1instance *here = (BSIM3v1instance*)inst; switch(param) { case BSIM3v1_W: - here->BSIM3v1w = value->rValue; + here->BSIM3v1w = value->rValue*scale; here->BSIM3v1wGiven = TRUE; break; case BSIM3v1_L: - here->BSIM3v1l = value->rValue; + here->BSIM3v1l = value->rValue*scale; here->BSIM3v1lGiven = TRUE; break; case BSIM3v1_M: @@ -34,19 +39,19 @@ BSIM3v1param(int param, IFvalue *value, GENinstance *inst, IFvalue *select) here->BSIM3v1mGiven = TRUE; break; case BSIM3v1_AS: - here->BSIM3v1sourceArea = value->rValue; + here->BSIM3v1sourceArea = value->rValue*scale*scale; here->BSIM3v1sourceAreaGiven = TRUE; break; case BSIM3v1_AD: - here->BSIM3v1drainArea = value->rValue; + here->BSIM3v1drainArea = value->rValue*scale*scale; here->BSIM3v1drainAreaGiven = TRUE; break; case BSIM3v1_PS: - here->BSIM3v1sourcePerimeter = value->rValue; + here->BSIM3v1sourcePerimeter = value->rValue*scale; here->BSIM3v1sourcePerimeterGiven = TRUE; break; case BSIM3v1_PD: - here->BSIM3v1drainPerimeter = value->rValue; + here->BSIM3v1drainPerimeter = value->rValue*scale; here->BSIM3v1drainPerimeterGiven = TRUE; break; case BSIM3v1_NRS: diff --git a/src/spicelib/devices/bsim3v1a/b3v1apar.c b/src/spicelib/devices/bsim3v1a/b3v1apar.c index dbd0df32c..ee07f43ee 100644 --- a/src/spicelib/devices/bsim3v1a/b3v1apar.c +++ b/src/spicelib/devices/bsim3v1a/b3v1apar.c @@ -10,18 +10,23 @@ File: b3v1apar.c #include "bsim3v1adef.h" #include "sperror.h" #include "suffix.h" +#include "fteext.h" int BSIM3v1Aparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { + double scale; + + if ( !cp_getvar( "scale", CP_REAL, (double*) &scale ) ) scale = 1; + BSIM3v1Ainstance *here = (BSIM3v1Ainstance*)inst; switch(param) { case BSIM3v1A_W: - here->BSIM3v1Aw = value->rValue; + here->BSIM3v1Aw = value->rValue*scale; here->BSIM3v1AwGiven = TRUE; break; case BSIM3v1A_L: - here->BSIM3v1Al = value->rValue; + here->BSIM3v1Al = value->rValue*scale; here->BSIM3v1AlGiven = TRUE; break; case BSIM3v1A_M: @@ -29,19 +34,19 @@ BSIM3v1Aparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) here->BSIM3v1AmGiven = TRUE; break; case BSIM3v1A_AS: - here->BSIM3v1AsourceArea = value->rValue; + here->BSIM3v1AsourceArea = value->rValue*scale*scale; here->BSIM3v1AsourceAreaGiven = TRUE; break; case BSIM3v1A_AD: - here->BSIM3v1AdrainArea = value->rValue; + here->BSIM3v1AdrainArea = value->rValue*scale*scale; here->BSIM3v1AdrainAreaGiven = TRUE; break; case BSIM3v1A_PS: - here->BSIM3v1AsourcePerimeter = value->rValue; + here->BSIM3v1AsourcePerimeter = value->rValue*scale; here->BSIM3v1AsourcePerimeterGiven = TRUE; break; case BSIM3v1A_PD: - here->BSIM3v1AdrainPerimeter = value->rValue; + here->BSIM3v1AdrainPerimeter = value->rValue*scale; here->BSIM3v1AdrainPerimeterGiven = TRUE; break; case BSIM3v1A_NRS: diff --git a/src/spicelib/devices/bsim3v1s/b3v1spar.c b/src/spicelib/devices/bsim3v1s/b3v1spar.c index 035ec0950..24b6e51c6 100644 --- a/src/spicelib/devices/bsim3v1s/b3v1spar.c +++ b/src/spicelib/devices/bsim3v1s/b3v1spar.c @@ -10,34 +10,39 @@ File: b3v1spar.c #include "bsim3v1sdef.h" #include "sperror.h" #include "suffix.h" +#include "fteext.h" int BSIM3v1Sparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) { + double scale; + + if ( !cp_getvar( "scale", CP_REAL, (double*) &scale ) ) scale = 1; + BSIM3v1Sinstance *here = (BSIM3v1Sinstance*)inst; switch(param) { case BSIM3v1S_W: - here->BSIM3v1Sw = value->rValue; + here->BSIM3v1Sw = value->rValue*scale; here->BSIM3v1SwGiven = TRUE; break; case BSIM3v1S_L: - here->BSIM3v1Sl = value->rValue; + here->BSIM3v1Sl = value->rValue*scale; here->BSIM3v1SlGiven = TRUE; break; case BSIM3v1S_AS: - here->BSIM3v1SsourceArea = value->rValue; + here->BSIM3v1SsourceArea = value->rValue*scale*scale; here->BSIM3v1SsourceAreaGiven = TRUE; break; case BSIM3v1S_AD: - here->BSIM3v1SdrainArea = value->rValue; + here->BSIM3v1SdrainArea = value->rValue*scale*scale; here->BSIM3v1SdrainAreaGiven = TRUE; break; case BSIM3v1S_PS: - here->BSIM3v1SsourcePerimeter = value->rValue; + here->BSIM3v1SsourcePerimeter = value->rValue*scale; here->BSIM3v1SsourcePerimeterGiven = TRUE; break; case BSIM3v1S_PD: - here->BSIM3v1SdrainPerimeter = value->rValue; + here->BSIM3v1SdrainPerimeter = value->rValue*scale; here->BSIM3v1SdrainPerimeterGiven = TRUE; break; case BSIM3v1S_NRS: diff --git a/src/spicelib/devices/bsim4/b4par.c b/src/spicelib/devices/bsim4/b4par.c index 19f07b543..ac4afcb40 100644 --- a/src/spicelib/devices/bsim4/b4par.c +++ b/src/spicelib/devices/bsim4/b4par.c @@ -19,6 +19,7 @@ #include "bsim4def.h" #include "sperror.h" #include "suffix.h" +#include "fteext.h" int BSIM4param(param,value,inst,select) @@ -27,14 +28,18 @@ IFvalue *value; GENinstance *inst; IFvalue *select; { + double scale; + + if ( !cp_getvar( "scale", CP_REAL, (double*) &scale ) ) scale = 1; + BSIM4instance *here = (BSIM4instance*)inst; switch(param) { case BSIM4_W: - here->BSIM4w = value->rValue; + here->BSIM4w = value->rValue*scale; here->BSIM4wGiven = TRUE; break; case BSIM4_L: - here->BSIM4l = value->rValue; + here->BSIM4l = value->rValue*scale; here->BSIM4lGiven = TRUE; break; case BSIM4_M: @@ -50,19 +55,19 @@ IFvalue *select; here->BSIM4minGiven = TRUE; break; case BSIM4_AS: - here->BSIM4sourceArea = value->rValue; + here->BSIM4sourceArea = value->rValue*scale*scale; here->BSIM4sourceAreaGiven = TRUE; break; case BSIM4_AD: - here->BSIM4drainArea = value->rValue; + here->BSIM4drainArea = value->rValue*scale*scale; here->BSIM4drainAreaGiven = TRUE; break; case BSIM4_PS: - here->BSIM4sourcePerimeter = value->rValue; + here->BSIM4sourcePerimeter = value->rValue*scale; here->BSIM4sourcePerimeterGiven = TRUE; break; case BSIM4_PD: - here->BSIM4drainPerimeter = value->rValue; + here->BSIM4drainPerimeter = value->rValue*scale; here->BSIM4drainPerimeterGiven = TRUE; break; case BSIM4_NRS: diff --git a/src/spicelib/devices/bsim4v2/b4v2par.c b/src/spicelib/devices/bsim4v2/b4v2par.c index 905bd1174..3fcdd9fe0 100644 --- a/src/spicelib/devices/bsim4v2/b4v2par.c +++ b/src/spicelib/devices/bsim4v2/b4v2par.c @@ -9,7 +9,6 @@ **********/ #include "ngspice.h" -#include #include "ifsim.h" #include "bsim4v2def.h" #include "sperror.h"