inp2m.c, #6/15b, abstraction, introduce valid_numnodes()
This commit is contained in:
parent
cff00524c2
commit
7a1b65f045
|
|
@ -13,6 +13,54 @@ Modified: 2001 Paolo Nenzi (Cider Integration)
|
|||
#include "inpxx.h"
|
||||
|
||||
|
||||
static bool
|
||||
valid_numnodes(int numnodes, INPmodel *thismodel, card *current)
|
||||
{
|
||||
bool valid;
|
||||
|
||||
switch (numnodes) {
|
||||
case 7:
|
||||
valid =
|
||||
thismodel->INPmodType == INPtypelook("B4SOI") ||
|
||||
thismodel->INPmodType == INPtypelook("B3SOIPD") ||
|
||||
thismodel->INPmodType == INPtypelook("B3SOIFD") ||
|
||||
thismodel->INPmodType == INPtypelook("B3SOIDD");
|
||||
if (!valid)
|
||||
LITERR ("only level 55-58: B3SOI(PD|FD|DD) and B4SOI can have 7 nodes");
|
||||
return valid;
|
||||
|
||||
case 6:
|
||||
valid =
|
||||
thismodel->INPmodType == INPtypelook("B4SOI") ||
|
||||
thismodel->INPmodType == INPtypelook("B3SOIPD") ||
|
||||
thismodel->INPmodType == INPtypelook("B3SOIFD") ||
|
||||
thismodel->INPmodType == INPtypelook("B3SOIDD") ||
|
||||
thismodel->INPmodType == INPtypelook("HiSIMHV1") ||
|
||||
thismodel->INPmodType == INPtypelook("HiSIMHV2") ||
|
||||
thismodel->INPmodType == INPtypelook("SOI3");
|
||||
if (!valid)
|
||||
LITERR ("only level 55-58,61,62: B3SOI(PD|FD|DD), B4SOI, STAG (SOI3) and HiSIMHV can have 6 nodes");
|
||||
return valid;
|
||||
|
||||
case 5:
|
||||
valid =
|
||||
thismodel->INPmodType == INPtypelook("B4SOI") ||
|
||||
thismodel->INPmodType == INPtypelook("B3SOIPD") ||
|
||||
thismodel->INPmodType == INPtypelook("B3SOIFD") ||
|
||||
thismodel->INPmodType == INPtypelook("B3SOIDD") ||
|
||||
thismodel->INPmodType == INPtypelook("HiSIMHV1") ||
|
||||
thismodel->INPmodType == INPtypelook("HiSIMHV2") ||
|
||||
thismodel->INPmodType == INPtypelook("SOI3");
|
||||
if (!valid)
|
||||
LITERR ("only level 55-58,61,62: B3SOI(PD|FD|DD), B4SOI, STAG (SOI3) and HiSIMHV can have 5 nodes");
|
||||
return valid;
|
||||
|
||||
default:
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
INP2M(CKTcircuit *ckt, INPtables *tab, card *current)
|
||||
{
|
||||
|
|
@ -111,13 +159,7 @@ INP2M(CKTcircuit *ckt, INPtables *tab, card *current)
|
|||
|
||||
if (thismodel) {
|
||||
/* nodeflag == 7 */
|
||||
if (thismodel->INPmodType != INPtypelook("B4SOI") &&
|
||||
thismodel->INPmodType != INPtypelook("B3SOIPD") &&
|
||||
thismodel->INPmodType != INPtypelook("B3SOIFD") &&
|
||||
thismodel->INPmodType != INPtypelook("B3SOIDD"))
|
||||
{
|
||||
/* if model is not variable node B3SOIPD/FD/DD model, error! */
|
||||
LITERR ("only level 55-58: B3SOI(PD|FD|DD) and B4SOI can have 7 nodes");
|
||||
if (!valid_numnodes(nodeflag, thismodel, current)) {
|
||||
return;
|
||||
} else {
|
||||
INPtermInsert(ckt, &nname5, tab, &node5);
|
||||
|
|
@ -135,17 +177,7 @@ INP2M(CKTcircuit *ckt, INPtables *tab, card *current)
|
|||
}
|
||||
} else {
|
||||
/* nodeflag == 6 */
|
||||
/* 7th token is a model - only have 6 terminal device */
|
||||
if (thismodel->INPmodType != INPtypelook("B4SOI") &&
|
||||
thismodel->INPmodType != INPtypelook("B3SOIPD") &&
|
||||
thismodel->INPmodType != INPtypelook("B3SOIFD") &&
|
||||
thismodel->INPmodType != INPtypelook("B3SOIDD") &&
|
||||
thismodel->INPmodType != INPtypelook("HiSIMHV1") &&
|
||||
thismodel->INPmodType != INPtypelook("HiSIMHV2") &&
|
||||
thismodel->INPmodType != INPtypelook("SOI3"))
|
||||
{
|
||||
/* if model is not variable node B3SOIPD/FD/DD or STAG model, error! */
|
||||
LITERR ("only level 55-58,61,62: B3SOI(PD|FD|DD), B4SOI, STAG (SOI3) and HiSIMHV can have 6 nodes");
|
||||
if (!valid_numnodes(nodeflag, thismodel, current)) {
|
||||
return;
|
||||
} else {
|
||||
INPtermInsert(ckt, &nname5, tab, &node5);
|
||||
|
|
@ -155,17 +187,7 @@ INP2M(CKTcircuit *ckt, INPtables *tab, card *current)
|
|||
}
|
||||
} else {
|
||||
/* nodeflag == 5 */
|
||||
/* 6th token is a model - only have 5 terminal device */
|
||||
if (thismodel->INPmodType != INPtypelook("B4SOI") &&
|
||||
thismodel->INPmodType != INPtypelook("B3SOIPD") &&
|
||||
thismodel->INPmodType != INPtypelook("B3SOIFD") &&
|
||||
thismodel->INPmodType != INPtypelook("B3SOIDD") &&
|
||||
thismodel->INPmodType != INPtypelook("HiSIMHV1") &&
|
||||
thismodel->INPmodType != INPtypelook("HiSIMHV2") &&
|
||||
thismodel->INPmodType != INPtypelook("SOI3"))
|
||||
{
|
||||
/* if model is not variable node B3SOIPD/FD/DD model, error! */
|
||||
LITERR ("only level 55-58,61,62: B3SOI(PD|FD|DD), B4SOI, STAG (SOI3) and HiSIMHV can have 5 nodes");
|
||||
if (!valid_numnodes(nodeflag, thismodel, current)) {
|
||||
return;
|
||||
} else {
|
||||
INPtermInsert(ckt, &nname5, tab, &node5);
|
||||
|
|
|
|||
Loading…
Reference in New Issue