optran is only selected when the 'optran' command has been processed.

If not, the call to the OPtran() function returns the previous
'converged' value.
This commit is contained in:
Holger Vogt 2021-08-20 18:46:50 +02:00
parent 7f1fdd3934
commit 493cf73f7f
3 changed files with 7 additions and 5 deletions

View File

@ -405,7 +405,7 @@ extern int PZpost(CKTcircuit *);
extern int PZaskQuest(CKTcircuit *, JOB *, int , IFvalue *); extern int PZaskQuest(CKTcircuit *, JOB *, int , IFvalue *);
extern int PZsetParm(CKTcircuit *, JOB *, int , IFvalue *); extern int PZsetParm(CKTcircuit *, JOB *, int , IFvalue *);
extern int OPtran(CKTcircuit *); extern int OPtran(CKTcircuit *, int);
#ifdef WANT_SENSE2 #ifdef WANT_SENSE2
extern int SENaskQuest(CKTcircuit *, JOB *, int , IFvalue *); extern int SENaskQuest(CKTcircuit *, JOB *, int , IFvalue *);

View File

@ -89,7 +89,9 @@ CKTop (CKTcircuit *ckt, long int firstmode, long int continuemode,
return converged; return converged;
} }
converged = OPtran(ckt); /* If command 'optran' is not given, the function
returns immediately with the previous 'converged' */
converged = OPtran(ckt, converged);
#ifdef XSPICE #ifdef XSPICE
/* gtri - wbk - add convergence problem reporting flags */ /* gtri - wbk - add convergence problem reporting flags */

View File

@ -220,7 +220,7 @@ int OPsetBreak(CKTcircuit *ckt, double time)
Thus this algorithm creates an operating point to start other simulations. Thus this algorithm creates an operating point to start other simulations.
The code is derived from dctran.c by removing all un-needed parts.*/ The code is derived from dctran.c by removing all un-needed parts.*/
int int
OPtran(CKTcircuit *ckt) OPtran(CKTcircuit *ckt, int oldconverged)
{ {
int i; int i;
double olddelta; double olddelta;
@ -243,10 +243,10 @@ OPtran(CKTcircuit *ckt)
int redostep; int redostep;
#endif #endif
/* if optran command has not been given (in .spiceinit or in .control section, /* if optran command has not been given (in .spiceinit or in .control section),
we don' use optran */ we don' use optran */
if (nooptran) if (nooptran)
return 1; return oldconverged;
/* /*
ACAN *acjob = (ACAN *) ckt->CKTcurJob; ACAN *acjob = (ACAN *) ckt->CKTcurJob;
TRANan *trjob = (TRANan *) ckt->CKTcurJob; TRANan *trjob = (TRANan *) ckt->CKTcurJob;