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 PZsetParm(CKTcircuit *, JOB *, int , IFvalue *);
extern int OPtran(CKTcircuit *);
extern int OPtran(CKTcircuit *, int);
#ifdef WANT_SENSE2
extern int SENaskQuest(CKTcircuit *, JOB *, int , IFvalue *);

View File

@ -89,7 +89,9 @@ CKTop (CKTcircuit *ckt, long int firstmode, long int continuemode,
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
/* 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.
The code is derived from dctran.c by removing all un-needed parts.*/
int
OPtran(CKTcircuit *ckt)
OPtran(CKTcircuit *ckt, int oldconverged)
{
int i;
double olddelta;
@ -243,10 +243,10 @@ OPtran(CKTcircuit *ckt)
int redostep;
#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 */
if (nooptran)
return 1;
return oldconverged;
/*
ACAN *acjob = (ACAN *) ckt->CKTcurJob;
TRANan *trjob = (TRANan *) ckt->CKTcurJob;