introduce option "epsmin"
To define a minimum argument for some log() function invocations. (most notably for the diode saturation current 'is')
This commit is contained in:
parent
78cc48575b
commit
c82ee9d949
|
|
@ -48,6 +48,7 @@ com_option(wordlist *wl)
|
|||
printf("MaxOrder = %d\n", circuit->CKTmaxOrder);
|
||||
printf("xmu = %g\n", circuit->CKTxmu);
|
||||
printf("indverbosity = %d\n", circuit->CKTindverbosity);
|
||||
printf("epsmin = %g\n", circuit->CKTepsmin);
|
||||
|
||||
printf("\nTolerances (absolute):\n");
|
||||
printf("abstol (current) = %g\n", circuit->CKTabstol);
|
||||
|
|
|
|||
|
|
@ -1411,6 +1411,7 @@ void com_snload(wordlist *wl)
|
|||
_t(CKTintegrateMethod);
|
||||
_t(CKTxmu);
|
||||
_t(CKTindverbosity);
|
||||
_t(CKTepsmin);
|
||||
|
||||
_t(CKTniState);
|
||||
|
||||
|
|
|
|||
|
|
@ -293,6 +293,8 @@ struct CKTcircuit {
|
|||
a safe operating area (SOA) check is executed */
|
||||
int CKTsoaMaxWarns; /* specifies the maximum number of SOA warnings */
|
||||
|
||||
double CKTepsmin; /* minimum argument value for some log functions, e.g. diode saturation current*/
|
||||
|
||||
NGHASHPTR DEVnameHash;
|
||||
NGHASHPTR MODnameHash;
|
||||
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ typedef struct {
|
|||
#define OPT_NOOPAC 68
|
||||
#define OPT_XMU 69
|
||||
#define OPT_INDVERBOSITY 70
|
||||
#define OPT_EPSMIN 71
|
||||
|
||||
|
||||
#ifdef XSPICE
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ struct TSKtask {
|
|||
double TSKabsDv; /* abs limit for iter-iter voltage change */
|
||||
double TSKrelDv; /* rel limit for iter-iter voltage change */
|
||||
unsigned int TSKnoopac:1; /* flag for no OP calculation before AC */
|
||||
double TSKepsmin; /* minimum value for log */
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@ CKTdoJob(CKTcircuit *ckt, int reset, TSKtask *task)
|
|||
ckt->CKTtroubleNode = 0;
|
||||
ckt->CKTtroubleElt = NULL;
|
||||
ckt->CKTnoopac = task->TSKnoopac && ckt->CKTisLinear;
|
||||
ckt->CKTepsmin = task->TSKepsmin;
|
||||
#ifdef NEWTRUNC
|
||||
ckt->CKTlteReltol = task->TSKlteReltol;
|
||||
ckt->CKTlteAbstol = task->TSKlteAbstol;
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ CKTnewTask(CKTcircuit *ckt, TSKtask **taskPtr, IFuid taskName, TSKtask **defPtr)
|
|||
tsk->TSKabsDv = def->TSKabsDv;
|
||||
tsk->TSKrelDv = def->TSKrelDv;
|
||||
tsk->TSKnoopac = def->TSKnoopac;
|
||||
tsk->TSKepsmin = def->TSKepsmin;
|
||||
#ifdef NEWTRUNC
|
||||
tsk->TSKlteReltol = def->TSKlteReltol;
|
||||
tsk->TSKlteAbstol = def->TSKlteAbstol;
|
||||
|
|
@ -129,6 +130,7 @@ CKTnewTask(CKTcircuit *ckt, TSKtask **taskPtr, IFuid taskName, TSKtask **defPtr)
|
|||
tsk->TSKnodeDamping = 0;
|
||||
tsk->TSKabsDv = 0.5;
|
||||
tsk->TSKrelDv = 2.0;
|
||||
tsk->TSKepsmin = 1e-28;
|
||||
|
||||
#if (1) /*CDHW*/
|
||||
}
|
||||
|
|
|
|||
|
|
@ -169,6 +169,9 @@ CKTsetOpt(CKTcircuit *ckt, JOB *anal, int opt, IFvalue *val)
|
|||
case OPT_NOOPAC:
|
||||
task->TSKnoopac = (val->iValue != 0);
|
||||
break;
|
||||
case OPT_EPSMIN:
|
||||
task->TSKepsmin = val->rValue;
|
||||
break;
|
||||
/* gtri - begin - wbk - add new options */
|
||||
#ifdef XSPICE
|
||||
case OPT_EVT_MAX_OP_ALTER:
|
||||
|
|
@ -323,7 +326,9 @@ static IFparm OPTtbl[] = {
|
|||
{ "reldv", OPT_RELDV, IF_SET|IF_REAL,
|
||||
"Maximum relative iter-iter node voltage change" },
|
||||
{ "noopac", OPT_NOOPAC, IF_SET|IF_FLAG,
|
||||
"No op calculation in ac if circuit is linear" }
|
||||
"No op calculation in ac if circuit is linear" },
|
||||
{ "epsmin", OPT_EPSMIN, IF_SET|IF_REAL,
|
||||
"Minimum value for log" }
|
||||
};
|
||||
|
||||
int OPTcount = NUMELEMS(OPTtbl);
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ CKTinit(CKTcircuit **ckt) /* new circuit to create */
|
|||
sckt->CKTvarHertz = 0;
|
||||
sckt->DEVnameHash = nghash_init_pointer(100);
|
||||
sckt->MODnameHash = nghash_init_pointer(100);
|
||||
sckt->CKTepsmin = 1e-28;
|
||||
|
||||
#ifdef XSPICE
|
||||
/* gtri - begin - wbk - allocate/initialize substructs */
|
||||
|
|
|
|||
Loading…
Reference in New Issue