initial PSS commit
This commit is contained in:
parent
70b7ef1bc1
commit
899d5516c3
21
ChangeLog
21
ChangeLog
|
|
@ -1,3 +1,24 @@
|
|||
2011-08-04
|
||||
|
||||
* src/frontend/commands.c ,
|
||||
* src/frontend/runcoms.c ,
|
||||
* src/frontend/runcoms.h ,
|
||||
* src/frontend/shyu.c ,
|
||||
* src/frontend/spiceif.c ,
|
||||
* src/include/Makefile.am ,
|
||||
* src/include/cktdefs.h ,
|
||||
* src/spicelib/analysis/Makefile.am ,
|
||||
* src/spicelib/analysis/analysis.c ,
|
||||
* src/spicelib/parser/inp2dot.c ,
|
||||
* (new) src/include/pssdefs.h ,
|
||||
|
||||
* (new) src/spicelib/analysis/dcpss.c ,
|
||||
* (new) src/spicelib/analysis/pssaskq.c ,
|
||||
* (new) src/spicelib/analysis/pssinit.c ,
|
||||
* (new) src/spicelib/analysis/psssetp.c :
|
||||
|
||||
paolo, please fix this <-------------
|
||||
|
||||
2011-08-04 Robert Larice
|
||||
* src/spicelib/analysis/cktsetbk.c :
|
||||
bug fix, broken insert at the front of CKTbreaks[]
|
||||
|
|
|
|||
|
|
@ -277,6 +277,12 @@ struct comm spcp_coms[] = {
|
|||
{ 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS,
|
||||
NULL,
|
||||
"[.tran line args] : Do a transient analysis." } ,
|
||||
/* SP: Steady State Analysis */
|
||||
{ "pss", com_pss, TRUE, TRUE,
|
||||
{ 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS,
|
||||
NULL,
|
||||
"[.pss line args] : Do a periodic state analysis." } ,
|
||||
/* SP */
|
||||
{ "ac", com_ac, TRUE, TRUE,
|
||||
{ 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS,
|
||||
NULL,
|
||||
|
|
@ -683,6 +689,12 @@ struct comm nutcp_coms[] = {
|
|||
{ 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS,
|
||||
NULL,
|
||||
"[.tran line args] : Do a transient analysis." } ,
|
||||
/* SP: Steady State Analysis */
|
||||
{ "pss", NULL, TRUE, TRUE,
|
||||
{ 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS,
|
||||
NULL,
|
||||
"[.pss line args] : Do a periodic steady state analysis." } ,
|
||||
/* SP */
|
||||
{ "ac", NULL, TRUE, TRUE,
|
||||
{ 0, 0, 0, 0 }, E_DEFHMASK, 0, LOTS,
|
||||
NULL,
|
||||
|
|
|
|||
|
|
@ -169,6 +169,15 @@ com_noise(wordlist *wl)
|
|||
return;
|
||||
}
|
||||
|
||||
/* SP: Steady State Analysis */
|
||||
void
|
||||
com_pss(wordlist *wl)
|
||||
{
|
||||
dosim("pss", wl);
|
||||
return;
|
||||
}
|
||||
/* SP */
|
||||
|
||||
static int
|
||||
dosim(
|
||||
char *what, /* in: command (pz,op,dc,ac,tf,tran,sens,disto,noise,run) */
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ void com_dc(wordlist *wl);
|
|||
void com_ac(wordlist *wl);
|
||||
void com_tf(wordlist *wl);
|
||||
void com_tran(wordlist *wl);
|
||||
/* SP: Stady State Analysis */
|
||||
void com_pss(wordlist *wl);
|
||||
/* SP */
|
||||
void com_sens(wordlist *wl);
|
||||
void com_disto(wordlist *wl);
|
||||
void com_noise(wordlist *wl);
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ if_sens_run(CKTcircuit *ckt, wordlist *args, INPtables *tab)
|
|||
JOB *opJob;
|
||||
JOB *dcJob;
|
||||
JOB *tranJob;
|
||||
JOB *pssJob;
|
||||
card *current;
|
||||
IFvalue ptemp;
|
||||
IFvalue *parm;
|
||||
|
|
@ -285,6 +286,51 @@ uic:
|
|||
}
|
||||
}
|
||||
|
||||
/* *********************** */
|
||||
/* PSS - Spertica - 100910 */
|
||||
/* *********************** */
|
||||
if(strcmp(token ,"pss")==0){
|
||||
which = -1;
|
||||
for(j=0;j<ft_sim->numAnalyses;j++) {
|
||||
if(strcmp(ft_sim->analyses[j]->name,"PSS")==0) {
|
||||
which = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(which != -1) {
|
||||
err = (*(ft_sim->newAnalysis))(ft_curckt->ci_ckt,which,"pssan",
|
||||
&(tranJob),ft_curckt->ci_specTask);
|
||||
if(err) {
|
||||
ft_sperror(err,"createPSS");
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
else{
|
||||
current->error = INPerrCat(current->error,INPmkTemp(
|
||||
"periodic steady state analysis unsupported\n"));
|
||||
}
|
||||
|
||||
parm=INPgetValue(ckt,&line,IF_REAL,tab);/* Guessed Frequency */
|
||||
error = INPapName(ckt,which,pssJob,"fguess",parm);
|
||||
if(error) current->error = INPerrCat(current->error,
|
||||
INPerror(error));
|
||||
|
||||
parm = INPgetValue(ckt,&line,IF_REAL,tab); /* Stabilization time */
|
||||
error = INPapName(ckt,which,pssJob,"stabtime",parm);
|
||||
if(error) current->error = INPerrCat(current->error,
|
||||
INPerror(error));
|
||||
|
||||
parm = INPgetValue(ckt,&line,IF_INTEGER,tab); /* PSS points */
|
||||
error = INPapName(ckt,which,pssJob,"points",parm);
|
||||
if(error) current->error = INPerrCat(current->error,
|
||||
INPerror(error));
|
||||
|
||||
parm = INPgetValue(ckt,&line,IF_INTEGER,tab); /* PSS points */
|
||||
error = INPapName(ckt,which,pssJob,"harmonics",parm);
|
||||
if(error) current->error = INPerrCat(current->error,
|
||||
INPerror(error));
|
||||
}
|
||||
|
||||
next:
|
||||
while(*line) { /* read the entire line */
|
||||
if(flag){
|
||||
|
|
|
|||
|
|
@ -215,7 +215,10 @@ if_run(CKTcircuit *ckt, char *what, wordlist *args, INPtables *tab)
|
|||
|| eq(what, "adjsen")
|
||||
|| eq(what, "sens")
|
||||
|| eq(what,"tf")
|
||||
|| eq(what, "noise"))
|
||||
|| eq(what, "noise")
|
||||
/* SP: Steady State Analysis */
|
||||
|| eq(what, "pss"))
|
||||
/* SP */
|
||||
{
|
||||
s = wl_flatten(args); /* va: tfree char's tmalloc'ed in wl_flatten */
|
||||
(void) sprintf(buf, ".%s", s);
|
||||
|
|
@ -329,6 +332,9 @@ ci_specTask will point to it CDHW*/
|
|||
||(eq(what, "adjsen"))
|
||||
||(eq(what, "sens"))
|
||||
||(eq(what,"tf"))
|
||||
/* SP: Steady State Analysis */
|
||||
||(eq(what, "pss"))
|
||||
/* SP */
|
||||
||(eq(what, "run")) ) {
|
||||
|
||||
/*CDHW Run the analysis pointed to by ci_curTask CDHW*/
|
||||
|
|
|
|||
|
|
@ -93,6 +93,7 @@ noinst_HEADERS = \
|
|||
plot.h \
|
||||
pnode.h \
|
||||
profile.h \
|
||||
pssdefs.h \
|
||||
pzdefs.h \
|
||||
sen2defs.h \
|
||||
sensdefs.h \
|
||||
|
|
|
|||
|
|
@ -265,6 +265,15 @@ struct CKTcircuit {
|
|||
Enh_Ckt_Data_t *enh; /* data used by general enhancements */
|
||||
#endif
|
||||
/* gtri - evt - wbk - 5/20/91 - add event-driven and enhancements data */
|
||||
/* SP: Steady State Analysis - 100609 */
|
||||
double CKTstabTime; /* PSS stab time */
|
||||
double CKTguessedFreq; /* PSS guessed frequency */
|
||||
int CKTharms; /* PSS harmonics */
|
||||
long int CKTpsspoints; /* PSS number of samples */
|
||||
char *CKToscNode; /* PSS oscnode */
|
||||
double CKTsteady_coeff;
|
||||
int CKTsc_iter;
|
||||
/* SP: 100609 */
|
||||
|
||||
};
|
||||
|
||||
|
|
@ -379,6 +388,12 @@ extern int TFsetParm(CKTcircuit *, JOB *, int , IFvalue *);
|
|||
extern int TRANaskQuest(CKTcircuit *, JOB *, int , IFvalue *);
|
||||
extern int TRANsetParm(CKTcircuit *, JOB *, int , IFvalue *);
|
||||
extern int TRANinit(CKTcircuit *, JOB *);
|
||||
/* SP: Steady State Analysis */
|
||||
extern int PSSaskQuest( CKTcircuit *, JOB *, int , IFvalue *);
|
||||
extern int PSSsetParm( CKTcircuit *, JOB *, int , IFvalue *);
|
||||
extern int PSSinit(CKTcircuit *, JOB *);
|
||||
extern int DCpss( CKTcircuit *, int );
|
||||
/* SP */
|
||||
extern int NaskQuest(CKTcircuit *, JOB *, int, IFvalue *);
|
||||
extern int NsetParm(CKTcircuit *, JOB *, int, IFvalue *);
|
||||
extern int NIacIter(CKTcircuit *);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
/**********
|
||||
Author: 2010-05 Stefano Perticaroli ``spertica''
|
||||
**********/
|
||||
|
||||
#ifndef PSS
|
||||
#define PSS
|
||||
|
||||
#include "jobdefs.h"
|
||||
#include "tskdefs.h"
|
||||
/*
|
||||
* PSSdefs.h - defs for pss analyses
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
int JOBtype;
|
||||
JOB *JOBnextJob;
|
||||
char *JOBname;
|
||||
double PSSguessedFreq;
|
||||
CKTnode *PSSoscNode;
|
||||
double PSSstabTime;
|
||||
long PSSmode;
|
||||
long int PSSpoints;
|
||||
int PSSharms;
|
||||
void *PSSplot_td;
|
||||
void *PSSplot_fd;
|
||||
int sc_iter;
|
||||
double steady_coeff;
|
||||
} PSSan;
|
||||
|
||||
#define GUESSED_FREQ 1
|
||||
#define STAB_TIME 2
|
||||
#define OSC_NODE 3
|
||||
#define PSS_POINTS 4
|
||||
#define PSS_HARMS 5
|
||||
#define PSS_UIC 6
|
||||
#define SC_ITER 7
|
||||
#define STEADY_COEFF 8
|
||||
#endif /*PSS*/
|
||||
|
|
@ -72,6 +72,7 @@ libckt_la_SOURCES = \
|
|||
dcoaskq.c \
|
||||
dcop.c \
|
||||
dcosetp.c \
|
||||
dcpss.c \
|
||||
dctaskq.c \
|
||||
dctran.c \
|
||||
dctrcurv.c \
|
||||
|
|
@ -85,6 +86,9 @@ libckt_la_SOURCES = \
|
|||
ninteg.c \
|
||||
noisean.c \
|
||||
nsetparm.c \
|
||||
pssaskq.c \
|
||||
pssinit.c \
|
||||
psssetp.c \
|
||||
pzan.c \
|
||||
pzaskq.c \
|
||||
pzsetp.c \
|
||||
|
|
|
|||
|
|
@ -17,7 +17,9 @@ extern SPICEanalysis TFinfo;
|
|||
extern SPICEanalysis DISTOinfo;
|
||||
extern SPICEanalysis NOISEinfo;
|
||||
extern SPICEanalysis SENSinfo;
|
||||
|
||||
/* SP: Periodic Steady State*/
|
||||
extern SPICEanalysis PSSinfo;
|
||||
/* SP */
|
||||
|
||||
SPICEanalysis *analInfo[] = {
|
||||
&OPTinfo,
|
||||
|
|
@ -30,6 +32,7 @@ SPICEanalysis *analInfo[] = {
|
|||
&DISTOinfo,
|
||||
&NOISEinfo,
|
||||
&SENSinfo,
|
||||
&PSSinfo,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,52 @@
|
|||
/**********
|
||||
Author: 2010-05 Stefano Perticaroli ``spertica''
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include "ifsim.h"
|
||||
#include "iferrmsg.h"
|
||||
#include "cktdefs.h"
|
||||
#include "pssdefs.h"
|
||||
|
||||
/* ARGSUSED */
|
||||
int
|
||||
PSSaskQuest(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value)
|
||||
{
|
||||
NG_IGNORE(ckt);
|
||||
|
||||
switch(which) {
|
||||
|
||||
case GUESSED_FREQ:
|
||||
value->rValue = ((PSSan *)anal)->PSSguessedFreq;
|
||||
break;
|
||||
case OSC_NODE:
|
||||
value->nValue = ((PSSan *)anal)->PSSoscNode;
|
||||
break;
|
||||
case STAB_TIME:
|
||||
value->rValue = ((PSSan *)anal)->PSSstabTime;
|
||||
break;
|
||||
case PSS_UIC:
|
||||
if(((PSSan *)anal)->PSSmode & MODEUIC) {
|
||||
value->iValue = 1;
|
||||
} else {
|
||||
value->iValue = 0;
|
||||
}
|
||||
break;
|
||||
case PSS_POINTS:
|
||||
value->iValue = ((PSSan *)anal)->PSSpoints;
|
||||
break;
|
||||
case PSS_HARMS:
|
||||
value->iValue = ((PSSan *)anal)->PSSharms;
|
||||
break;
|
||||
case SC_ITER:
|
||||
value->iValue = ((PSSan *)anal)->sc_iter;
|
||||
break;
|
||||
case STEADY_COEFF:
|
||||
value->rValue = ((PSSan *)anal)->steady_coeff;
|
||||
break;
|
||||
|
||||
default:
|
||||
return(E_BADPARM);
|
||||
}
|
||||
return(OK);
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
/**********
|
||||
Author: 2010-05 Stefano Perticaroli ``spertica''
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include "cktdefs.h"
|
||||
#include "trandefs.h"
|
||||
#include "pssdefs.h"
|
||||
#include "iferrmsg.h"
|
||||
|
||||
int PSSinit(CKTcircuit *ckt, JOB *job)
|
||||
{
|
||||
/* Final time depends on stabilization time requested for PSS
|
||||
and on at least one more oscillation period */
|
||||
ckt->CKTfinalTime = ((PSSan*)job)->PSSstabTime + 2/((PSSan*)job)->PSSguessedFreq;
|
||||
/* Step is chosen empirically to be 1% of PSSguessedFreq */
|
||||
ckt->CKTstep = 0.01 * (1/((PSSan*)job)->PSSguessedFreq);
|
||||
/* Init time should be always zero */
|
||||
ckt->CKTinitTime = 0;
|
||||
/* MaxStep should not exceed Nyquist criterion */
|
||||
ckt->CKTmaxStep = 0.5*(1/((PSSan*)job)->PSSguessedFreq);
|
||||
ckt->CKTdelmin = 1e-9*ckt->CKTmaxStep;
|
||||
ckt->CKTmode = ((PSSan*)job)->PSSmode;
|
||||
/* modified CKTdefs.h for the following - 100609 */
|
||||
ckt->CKTstabTime = ((PSSan*)job)->PSSstabTime;
|
||||
ckt->CKTguessedFreq = ((PSSan*)job)->PSSguessedFreq;
|
||||
ckt->CKTharms = ((PSSan*)job)->PSSharms;
|
||||
ckt->CKTpsspoints = ((PSSan*)job)->PSSpoints;
|
||||
ckt->CKTsc_iter = ((PSSan*)job)->sc_iter;
|
||||
ckt->CKTsteady_coeff = ((PSSan*)job)->steady_coeff;
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
/**********
|
||||
Author: 2010-05 Stefano Perticaroli ``spertica''
|
||||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include "ifsim.h"
|
||||
#include "iferrmsg.h"
|
||||
#include "cktdefs.h"
|
||||
#include "pssdefs.h"
|
||||
|
||||
#include "analysis.h"
|
||||
|
||||
/* ARGSUSED */
|
||||
int
|
||||
PSSsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value)
|
||||
{
|
||||
NG_IGNORE(ckt);
|
||||
|
||||
switch(which) {
|
||||
|
||||
case GUESSED_FREQ:
|
||||
((PSSan *)anal)->PSSguessedFreq = value->rValue;
|
||||
break;
|
||||
case OSC_NODE:
|
||||
((PSSan *)anal)->PSSoscNode = value->nValue;
|
||||
break;
|
||||
case STAB_TIME:
|
||||
((PSSan *)anal)->PSSstabTime = value->rValue;
|
||||
break;
|
||||
case PSS_POINTS:
|
||||
((PSSan *)anal)->PSSpoints = value->iValue;
|
||||
break;
|
||||
case PSS_HARMS:
|
||||
((PSSan *)anal)->PSSharms = value->iValue;
|
||||
break;
|
||||
case PSS_UIC:
|
||||
if(value->iValue) {
|
||||
((PSSan *)anal)->PSSmode |= MODEUIC;
|
||||
}
|
||||
break;
|
||||
case SC_ITER:
|
||||
((PSSan *)anal)->sc_iter = value->iValue;
|
||||
break;
|
||||
case STEADY_COEFF:
|
||||
((PSSan *)anal)->steady_coeff = value->rValue;
|
||||
break;
|
||||
|
||||
default:
|
||||
return(E_BADPARM);
|
||||
}
|
||||
return(OK);
|
||||
}
|
||||
|
||||
|
||||
static IFparm PSSparms[] = {
|
||||
{ "fguess", GUESSED_FREQ, IF_SET|IF_REAL, "guessed frequency" },
|
||||
{ "oscnode", OSC_NODE, IF_SET|IF_STRING, "oscillation node" },
|
||||
{ "stabtime", STAB_TIME, IF_SET|IF_REAL, "stabilization time" },
|
||||
{ "points", PSS_POINTS, IF_SET|IF_INTEGER, "pick equispaced number of time points in PSS" },
|
||||
{ "harmonics", PSS_HARMS, IF_SET|IF_INTEGER, "consider only given number of harmonics in PSS from DC" },
|
||||
{ "uic", PSS_UIC, IF_SET|IF_INTEGER, "use initial conditions (1 true - 0 false)" },
|
||||
{ "sc_iter", SC_ITER, IF_SET|IF_INTEGER, "maxmimum number of shooting cycle iterations" },
|
||||
{ "steady_coeff", STEADY_COEFF, IF_SET|IF_INTEGER, "set steady coefficient for convergence test" }
|
||||
};
|
||||
|
||||
SPICEanalysis PSSinfo = {
|
||||
{
|
||||
"PSS",
|
||||
"Periodic Steady State analysis",
|
||||
|
||||
sizeof(PSSparms)/sizeof(IFparm),
|
||||
PSSparms
|
||||
},
|
||||
sizeof(PSSan),
|
||||
TIMEDOMAIN,
|
||||
1,
|
||||
PSSsetParm,
|
||||
PSSaskQuest,
|
||||
PSSinit,
|
||||
DCpss
|
||||
};
|
||||
|
|
@ -627,6 +627,73 @@ dot_sens2(char *line, CKTcircuit *ckt, INPtables *tab, card *current,
|
|||
}
|
||||
#endif
|
||||
|
||||
/*SP: Steady State Analyis */
|
||||
static int
|
||||
dot_pss(char *line, void *ckt, INPtables *tab, card *current,
|
||||
void *task, void *gnode, JOB *foo)
|
||||
{
|
||||
int error; /* error code temporary */
|
||||
IFvalue ptemp; /* a value structure to package resistance into */
|
||||
IFvalue *parm; /* a pointer to a value struct for function returns */
|
||||
char *nname; /* the oscNode name */
|
||||
CKTnode *nnode; /* the oscNode node */
|
||||
int which; /* which analysis we are performing */
|
||||
int i; /* generic loop variable */
|
||||
char *word; /* something to stick a word of input into */
|
||||
|
||||
NG_IGNORE(gnode);
|
||||
|
||||
/* .pss Fguess StabTime OscNode <UIC>*/
|
||||
which = -1;
|
||||
for (i = 0; i < ft_sim->numAnalyses; i++) {
|
||||
if (strcmp(ft_sim->analyses[i]->name, "PSS") == 0) {
|
||||
which = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (which == -1) {
|
||||
LITERR("Periodic steady state analysis unsupported.\n");
|
||||
return (0);
|
||||
}
|
||||
IFC(newAnalysis, (ckt, which, "Periodic steady state Analysis", &foo, task));
|
||||
|
||||
parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Fguess */
|
||||
GCA(INPapName, (ckt, which, foo, "fguess", parm));
|
||||
|
||||
parm = INPgetValue(ckt, &line, IF_REAL, tab); /* StabTime */
|
||||
GCA(INPapName, (ckt, which, foo, "stabtime", parm));
|
||||
|
||||
INPgetNetTok(&line, &nname, 0);
|
||||
INPtermInsert(ckt, &nname, tab, &nnode);
|
||||
ptemp.nValue = nnode;
|
||||
GCA(INPapName, (ckt, which, foo, "oscnode", &ptemp)) /* OscNode given as string */
|
||||
|
||||
parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* PSS points */
|
||||
GCA(INPapName, (ckt, which, foo, "points", parm));
|
||||
|
||||
parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* PSS harmonics */
|
||||
GCA(INPapName, (ckt, which, foo, "harmonics", parm));
|
||||
|
||||
if (*line) {
|
||||
INPgetTok(&line, &word, 1); /* uic? */
|
||||
if (strcmp(word, "uic") == 0) {
|
||||
ptemp.iValue = 1;
|
||||
GCA(INPapName, (ckt, which, foo, "uic", &ptemp));
|
||||
} else {
|
||||
LITERR(" Error: unknown parameter on .pss - ignored\n");
|
||||
}
|
||||
}
|
||||
|
||||
parm = INPgetValue(ckt, &line, IF_INTEGER, tab); /* SC iterations */
|
||||
GCA(INPapName, (ckt, which, foo, "sc_iter", parm));
|
||||
|
||||
parm = INPgetValue(ckt, &line, IF_REAL, tab); /* Steady coefficient */
|
||||
GCA(INPapName, (ckt, which, foo, "steady_coeff", parm));
|
||||
|
||||
return (0);
|
||||
}
|
||||
/* SP */
|
||||
|
||||
static int
|
||||
dot_options(char *line, CKTcircuit *ckt, INPtables *tab, card *current,
|
||||
TSKtask *task, CKTnode *gnode, JOB *foo)
|
||||
|
|
@ -706,6 +773,11 @@ INP2dot(CKTcircuit *ckt, INPtables *tab, card *current, TSKtask *task, CKTnode *
|
|||
} else if ((strcmp(token, ".tran") == 0)) {
|
||||
rtn = dot_tran(line, ckt, tab, current, task, gnode, foo);
|
||||
goto quit;
|
||||
/* SP: Steady State Analysis */
|
||||
} else if ((strcmp(token, ".pss") == 0)) {
|
||||
rtn = dot_pss(line, ckt, tab, current, task, gnode, foo);
|
||||
goto quit;
|
||||
/* SP */
|
||||
} else if ((strcmp(token, ".subckt") == 0) ||
|
||||
(strcmp(token, ".ends") == 0)) {
|
||||
/* not yet implemented - warn & ignore */
|
||||
|
|
|
|||
Loading…
Reference in New Issue