84 lines
2.1 KiB
C
84 lines
2.1 KiB
C
/**********
|
|
Author: 2010-05 Stefano Perticaroli ``spertica''
|
|
**********/
|
|
|
|
#include "ngspice/ngspice.h"
|
|
#include "ngspice/ifsim.h"
|
|
#include "ngspice/iferrmsg.h"
|
|
#include "ngspice/cktdefs.h"
|
|
#include "ngspice/pssdefs.h"
|
|
|
|
#include "analysis.h"
|
|
|
|
/* ARGSUSED */
|
|
int
|
|
PSSsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value)
|
|
{
|
|
PSSan *job = (PSSan *) anal;
|
|
|
|
NG_IGNORE(ckt);
|
|
|
|
switch(which) {
|
|
|
|
case GUESSED_FREQ:
|
|
job->PSSguessedFreq = value->rValue;
|
|
break;
|
|
case OSC_NODE:
|
|
job->PSSoscNode = value->nValue;
|
|
break;
|
|
case STAB_TIME:
|
|
job->PSSstabTime = value->rValue;
|
|
break;
|
|
case PSS_POINTS:
|
|
job->PSSpoints = value->iValue;
|
|
break;
|
|
case PSS_HARMS:
|
|
job->PSSharms = value->iValue;
|
|
break;
|
|
case PSS_UIC:
|
|
if(value->iValue) {
|
|
job->PSSmode |= MODEUIC;
|
|
}
|
|
break;
|
|
case SC_ITER:
|
|
job->sc_iter = value->iValue;
|
|
break;
|
|
case STEADY_COEFF:
|
|
job->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
|
|
};
|