ngspice/src/spicelib/analysis/transetp.c

86 lines
2.2 KiB
C

/**********
Copyright 1990 Regents of the University of California. All rights reserved.
Author: 1985 Thomas L. Quarles
**********/
#include "ngspice.h"
#include "ifsim.h"
#include "iferrmsg.h"
#include "trandefs.h"
#include "cktdefs.h"
#include "analysis.h"
/* ARGSUSED */
int
TRANsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value)
{
NG_IGNORE(ckt);
switch(which) {
case TRAN_TSTOP:
if (value->rValue <= 0.0) {
errMsg = copy("TST0P is invalid, must be greater than zero.");
((TRANan *)anal)->TRANfinalTime = 1.0;
return(E_PARMVAL);
}
((TRANan *)anal)->TRANfinalTime = value->rValue;
break;
case TRAN_TSTEP:
if (value->rValue <= 0.0) {
errMsg = copy( "TSTEP is invalid, must be greater than zero." );
((TRANan *)anal)->TRANstep = 1.0;
return(E_PARMVAL);
}
((TRANan *)anal)->TRANstep = value->rValue;
break;
case TRAN_TSTART:
if (value->rValue >= ((TRANan *)anal)->TRANfinalTime ) {
errMsg = copy("TSTART is invalid, must be less than TSTOP.");
((TRANan *)anal)->TRANinitTime = 0.0;
return(E_PARMVAL);
}
((TRANan *)anal)->TRANinitTime = value->rValue;
break;
case TRAN_TMAX:
((TRANan *)anal)->TRANmaxStep = value->rValue;
break;
case TRAN_UIC:
if(value->iValue) {
((TRANan *)anal)->TRANmode |= MODEUIC;
}
break;
default:
return(E_BADPARM);
}
return(OK);
}
static IFparm TRANparms[] = {
{ "tstart", TRAN_TSTART, IF_SET|IF_REAL, "starting time" },
{ "tstop", TRAN_TSTOP, IF_SET|IF_REAL, "ending time" },
{ "tstep", TRAN_TSTEP, IF_SET|IF_REAL, "time step" },
{ "tmax", TRAN_TMAX, IF_SET|IF_REAL, "maximum time step" },
{ "uic", TRAN_UIC, IF_SET|IF_FLAG, "use initial conditions" },
};
SPICEanalysis TRANinfo = {
{
"TRAN",
"Transient analysis",
NUMELEMS(TRANparms),
TRANparms
},
sizeof(TRANan),
TIMEDOMAIN,
1,
TRANsetParm,
TRANaskQuest,
TRANinit,
DCtran
};