allow geometry scaling by option `scale'
This commit is contained in:
parent
750b42e767
commit
921aca9d7e
|
|
@ -19,6 +19,7 @@
|
|||
#include "bsim4def.h"
|
||||
#include "ngspice/sperror.h"
|
||||
#include "ngspice/suffix.h"
|
||||
#include "ngspice/fteext.h"
|
||||
|
||||
int
|
||||
BSIM4param(
|
||||
|
|
@ -27,17 +28,22 @@ IFvalue *value,
|
|||
GENinstance *inst,
|
||||
IFvalue *select)
|
||||
{
|
||||
double scale;
|
||||
|
||||
BSIM4instance *here = (BSIM4instance*)inst;
|
||||
|
||||
NG_IGNORE(select);
|
||||
|
||||
if (!cp_getvar("scale", CP_REAL, &scale))
|
||||
scale = 1;
|
||||
|
||||
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:
|
||||
|
|
@ -53,19 +59,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:
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#include "b4soidef.h"
|
||||
#include "ngspice/sperror.h"
|
||||
#include "ngspice/suffix.h"
|
||||
#include "ngspice/fteext.h"
|
||||
|
||||
int
|
||||
B4SOIparam(
|
||||
|
|
@ -27,17 +28,22 @@ IFvalue *value,
|
|||
GENinstance *inst,
|
||||
IFvalue *select)
|
||||
{
|
||||
double scale;
|
||||
|
||||
B4SOIinstance *here = (B4SOIinstance*)inst;
|
||||
|
||||
NG_IGNORE(select);
|
||||
|
||||
if (!cp_getvar("scale", CP_REAL, &scale))
|
||||
scale = 1;
|
||||
|
||||
switch(param)
|
||||
{ case B4SOI_W:
|
||||
here->B4SOIw = value->rValue;
|
||||
here->B4SOIw = value->rValue * scale;
|
||||
here->B4SOIwGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_L:
|
||||
here->B4SOIl = value->rValue;
|
||||
here->B4SOIl = value->rValue * scale;
|
||||
here->B4SOIlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_M:
|
||||
|
|
@ -45,19 +51,19 @@ IFvalue *select)
|
|||
here->B4SOImGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_AS:
|
||||
here->B4SOIsourceArea = value->rValue;
|
||||
here->B4SOIsourceArea = value->rValue * scale * scale;
|
||||
here->B4SOIsourceAreaGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_AD:
|
||||
here->B4SOIdrainArea = value->rValue;
|
||||
here->B4SOIdrainArea = value->rValue * scale * scale;
|
||||
here->B4SOIdrainAreaGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_PS:
|
||||
here->B4SOIsourcePerimeter = value->rValue;
|
||||
here->B4SOIsourcePerimeter = value->rValue * scale;
|
||||
here->B4SOIsourcePerimeterGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_PD:
|
||||
here->B4SOIdrainPerimeter = value->rValue;
|
||||
here->B4SOIdrainPerimeter = value->rValue * scale;
|
||||
here->B4SOIdrainPerimeterGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_NRS:
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
#include "hsm2def.h"
|
||||
#include "ngspice/sperror.h"
|
||||
#include "ngspice/suffix.h"
|
||||
#include "ngspice/fteext.h"
|
||||
|
||||
int HSM2param(
|
||||
int param,
|
||||
|
|
@ -27,33 +28,38 @@ int HSM2param(
|
|||
GENinstance *inst,
|
||||
IFvalue *select)
|
||||
{
|
||||
double scale;
|
||||
|
||||
HSM2instance *here = (HSM2instance*)inst;
|
||||
|
||||
NG_IGNORE(select);
|
||||
|
||||
if (!cp_getvar("scale", CP_REAL, &scale))
|
||||
scale = 1;
|
||||
|
||||
switch (param) {
|
||||
case HSM2_W:
|
||||
here->HSM2_w = value->rValue;
|
||||
here->HSM2_w = value->rValue * scale;
|
||||
here->HSM2_w_Given = TRUE;
|
||||
break;
|
||||
case HSM2_L:
|
||||
here->HSM2_l = value->rValue;
|
||||
here->HSM2_l = value->rValue * scale;
|
||||
here->HSM2_l_Given = TRUE;
|
||||
break;
|
||||
case HSM2_AS:
|
||||
here->HSM2_as = value->rValue;
|
||||
here->HSM2_as = value->rValue * scale * scale;
|
||||
here->HSM2_as_Given = TRUE;
|
||||
break;
|
||||
case HSM2_AD:
|
||||
here->HSM2_ad = value->rValue;
|
||||
here->HSM2_ad = value->rValue * scale * scale;
|
||||
here->HSM2_ad_Given = TRUE;
|
||||
break;
|
||||
case HSM2_PS:
|
||||
here->HSM2_ps = value->rValue;
|
||||
here->HSM2_ps = value->rValue * scale;
|
||||
here->HSM2_ps_Given = TRUE;
|
||||
break;
|
||||
case HSM2_PD:
|
||||
here->HSM2_pd = value->rValue;
|
||||
here->HSM2_pd = value->rValue * scale;
|
||||
here->HSM2_pd_Given = TRUE;
|
||||
break;
|
||||
case HSM2_NRS:
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
#include "hsmhvdef.h"
|
||||
#include "ngspice/sperror.h"
|
||||
#include "ngspice/suffix.h"
|
||||
#include "ngspice/fteext.h"
|
||||
|
||||
int HSMHVparam(
|
||||
int param,
|
||||
|
|
@ -27,10 +28,15 @@ int HSMHVparam(
|
|||
GENinstance *inst,
|
||||
IFvalue *select)
|
||||
{
|
||||
double scale;
|
||||
|
||||
HSMHVinstance *here = (HSMHVinstance*)inst;
|
||||
|
||||
NG_IGNORE(select);
|
||||
|
||||
if (!cp_getvar("scale", CP_REAL, &scale))
|
||||
scale = 1;
|
||||
|
||||
switch (param) {
|
||||
case HSMHV_COSELFHEAT:
|
||||
here->HSMHV_coselfheat = value->iValue;
|
||||
|
|
@ -41,27 +47,27 @@ int HSMHVparam(
|
|||
here->HSMHV_cosubnode_Given = TRUE;
|
||||
break;
|
||||
case HSMHV_W:
|
||||
here->HSMHV_w = value->rValue;
|
||||
here->HSMHV_w = value->rValue * scale;
|
||||
here->HSMHV_w_Given = TRUE;
|
||||
break;
|
||||
case HSMHV_L:
|
||||
here->HSMHV_l = value->rValue;
|
||||
here->HSMHV_l = value->rValue * scale;
|
||||
here->HSMHV_l_Given = TRUE;
|
||||
break;
|
||||
case HSMHV_AS:
|
||||
here->HSMHV_as = value->rValue;
|
||||
here->HSMHV_as = value->rValue * scale * scale;
|
||||
here->HSMHV_as_Given = TRUE;
|
||||
break;
|
||||
case HSMHV_AD:
|
||||
here->HSMHV_ad = value->rValue;
|
||||
here->HSMHV_ad = value->rValue * scale * scale;
|
||||
here->HSMHV_ad_Given = TRUE;
|
||||
break;
|
||||
case HSMHV_PS:
|
||||
here->HSMHV_ps = value->rValue;
|
||||
here->HSMHV_ps = value->rValue * scale;
|
||||
here->HSMHV_ps_Given = TRUE;
|
||||
break;
|
||||
case HSMHV_PD:
|
||||
here->HSMHV_pd = value->rValue;
|
||||
here->HSMHV_pd = value->rValue * scale;
|
||||
here->HSMHV_pd_Given = TRUE;
|
||||
break;
|
||||
case HSMHV_NRS:
|
||||
|
|
|
|||
|
|
@ -12,16 +12,22 @@ Modified: 2000 AlansFixes
|
|||
#include "mos1defs.h"
|
||||
#include "ngspice/sperror.h"
|
||||
#include "ngspice/suffix.h"
|
||||
#include "ngspice/fteext.h"
|
||||
|
||||
|
||||
/* ARGSUSED */
|
||||
int
|
||||
MOS1param(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
|
||||
{
|
||||
double scale;
|
||||
|
||||
MOS1instance *here = (MOS1instance *)inst;
|
||||
|
||||
NG_IGNORE(select);
|
||||
|
||||
if (!cp_getvar("scale", CP_REAL, &scale))
|
||||
scale = 1;
|
||||
|
||||
switch(param) {
|
||||
case MOS1_TEMP:
|
||||
here->MOS1temp = value->rValue+CONSTCtoK;
|
||||
|
|
@ -36,27 +42,27 @@ MOS1param(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
|
|||
here->MOS1mGiven = TRUE;
|
||||
break;
|
||||
case MOS1_W:
|
||||
here->MOS1w = value->rValue;
|
||||
here->MOS1w = value->rValue * scale;
|
||||
here->MOS1wGiven = TRUE;
|
||||
break;
|
||||
case MOS1_L:
|
||||
here->MOS1l = value->rValue;
|
||||
here->MOS1l = value->rValue * scale;
|
||||
here->MOS1lGiven = TRUE;
|
||||
break;
|
||||
case MOS1_AS:
|
||||
here->MOS1sourceArea = value->rValue;
|
||||
here->MOS1sourceArea = value->rValue * scale * scale;
|
||||
here->MOS1sourceAreaGiven = TRUE;
|
||||
break;
|
||||
case MOS1_AD:
|
||||
here->MOS1drainArea = value->rValue;
|
||||
here->MOS1drainArea = value->rValue * scale * scale;
|
||||
here->MOS1drainAreaGiven = TRUE;
|
||||
break;
|
||||
case MOS1_PS:
|
||||
here->MOS1sourcePerimiter = value->rValue;
|
||||
here->MOS1sourcePerimiter = value->rValue * scale;
|
||||
here->MOS1sourcePerimiterGiven = TRUE;
|
||||
break;
|
||||
case MOS1_PD:
|
||||
here->MOS1drainPerimiter = value->rValue;
|
||||
here->MOS1drainPerimiter = value->rValue * scale;
|
||||
here->MOS1drainPerimiterGiven = TRUE;
|
||||
break;
|
||||
case MOS1_NRS:
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ Modified: 2000 AlansFixes
|
|||
#include "mos2defs.h"
|
||||
#include "ngspice/sperror.h"
|
||||
#include "ngspice/suffix.h"
|
||||
#include "ngspice/fteext.h"
|
||||
|
||||
|
||||
/* ARGSUSED */
|
||||
|
|
@ -19,10 +20,15 @@ int
|
|||
MOS2param(int param, IFvalue *value, GENinstance *inst,
|
||||
IFvalue *select)
|
||||
{
|
||||
double scale;
|
||||
|
||||
MOS2instance *here = (MOS2instance *)inst;
|
||||
|
||||
NG_IGNORE(select);
|
||||
|
||||
if (!cp_getvar("scale", CP_REAL, &scale))
|
||||
scale = 1;
|
||||
|
||||
switch(param) {
|
||||
case MOS2_TEMP:
|
||||
here->MOS2temp = value->rValue+CONSTCtoK;
|
||||
|
|
@ -37,27 +43,27 @@ MOS2param(int param, IFvalue *value, GENinstance *inst,
|
|||
here->MOS2mGiven = TRUE;
|
||||
break;
|
||||
case MOS2_W:
|
||||
here->MOS2w = value->rValue;
|
||||
here->MOS2w = value->rValue * scale;
|
||||
here->MOS2wGiven = TRUE;
|
||||
break;
|
||||
case MOS2_L:
|
||||
here->MOS2l = value->rValue;
|
||||
here->MOS2l = value->rValue * scale;
|
||||
here->MOS2lGiven = TRUE;
|
||||
break;
|
||||
case MOS2_AS:
|
||||
here->MOS2sourceArea = value->rValue;
|
||||
here->MOS2sourceArea = value->rValue * scale * scale;
|
||||
here->MOS2sourceAreaGiven = TRUE;
|
||||
break;
|
||||
case MOS2_AD:
|
||||
here->MOS2drainArea = value->rValue;
|
||||
here->MOS2drainArea = value->rValue * scale * scale;
|
||||
here->MOS2drainAreaGiven = TRUE;
|
||||
break;
|
||||
case MOS2_PS:
|
||||
here->MOS2sourcePerimiter = value->rValue;
|
||||
here->MOS2sourcePerimiter = value->rValue * scale;
|
||||
here->MOS2sourcePerimiterGiven = TRUE;
|
||||
break;
|
||||
case MOS2_PD:
|
||||
here->MOS2drainPerimiter = value->rValue;
|
||||
here->MOS2drainPerimiter = value->rValue * scale;
|
||||
here->MOS2drainPerimiterGiven = TRUE;
|
||||
break;
|
||||
case MOS2_NRS:
|
||||
|
|
|
|||
|
|
@ -12,16 +12,22 @@ Modified: 2000 AlansFixes
|
|||
#include "mos3defs.h"
|
||||
#include "ngspice/sperror.h"
|
||||
#include "ngspice/suffix.h"
|
||||
#include "ngspice/fteext.h"
|
||||
|
||||
|
||||
/* ARGSUSED */
|
||||
int
|
||||
MOS3param(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
|
||||
{
|
||||
double scale;
|
||||
|
||||
MOS3instance *here = (MOS3instance *)inst;
|
||||
|
||||
NG_IGNORE(select);
|
||||
|
||||
if (!cp_getvar("scale", CP_REAL, &scale))
|
||||
scale = 1;
|
||||
|
||||
switch(param) {
|
||||
|
||||
case MOS3_M:
|
||||
|
|
@ -29,27 +35,27 @@ MOS3param(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
|
|||
here->MOS3mGiven = TRUE;
|
||||
break;
|
||||
case MOS3_W:
|
||||
here->MOS3w = value->rValue;
|
||||
here->MOS3w = value->rValue * scale;
|
||||
here->MOS3wGiven = TRUE;
|
||||
break;
|
||||
case MOS3_L:
|
||||
here->MOS3l = value->rValue;
|
||||
here->MOS3l = value->rValue * scale;
|
||||
here->MOS3lGiven = TRUE;
|
||||
break;
|
||||
case MOS3_AS:
|
||||
here->MOS3sourceArea = value->rValue;
|
||||
here->MOS3sourceArea = value->rValue * scale * scale;
|
||||
here->MOS3sourceAreaGiven = TRUE;
|
||||
break;
|
||||
case MOS3_AD:
|
||||
here->MOS3drainArea = value->rValue;
|
||||
here->MOS3drainArea = value->rValue * scale * scale;
|
||||
here->MOS3drainAreaGiven = TRUE;
|
||||
break;
|
||||
case MOS3_PS:
|
||||
here->MOS3sourcePerimiter = value->rValue;
|
||||
here->MOS3sourcePerimiter = value->rValue * scale;
|
||||
here->MOS3sourcePerimiterGiven = TRUE;
|
||||
break;
|
||||
case MOS3_PD:
|
||||
here->MOS3drainPerimiter = value->rValue;
|
||||
here->MOS3drainPerimiter = value->rValue * scale;
|
||||
here->MOS3drainPerimiterGiven = TRUE;
|
||||
break;
|
||||
case MOS3_NRS:
|
||||
|
|
|
|||
Loading…
Reference in New Issue