'stop' and 'altermod' command execution modified

This commit is contained in:
h_vogt 2011-01-01 14:38:47 +00:00
parent 62f22b4145
commit cc6100f5cb
4 changed files with 40 additions and 8 deletions

View File

@ -1,3 +1,9 @@
11-01-01 Holger Vogt
* breakp.c: update to multiple conditionals with '=' in stop command
dctran.c: set breakpoint upon startup from database dbs ('stop when time = xxx' command)
spiceif.c: additional call to CKTtemp(ckt) after 'altermod' command to set
device instance pParam for immediate use
10-12-31 Holger Vogt
* breakp.c: allow multiple conditionals with '=' in stop command

View File

@ -88,11 +88,8 @@ com_stop(wordlist *wl)
charr[3] = NULL;
wln = wl_build(charr);
wl_splice(wl->wl_next, wln);
// wl_free(wl->wl_next);
// wl->wl_next = NULL;
// wl = wl_append(wl, wln);
}
/* continue with parsing the enhanced wordlist */
if (wl->wl_next->wl_next &&
wl->wl_next->wl_next->wl_next) {
wl = wl->wl_next;

View File

@ -928,6 +928,15 @@ if_setparam(CKTcircuit *ckt, char **name, char *param, struct dvec *val, int do_
dev = (GENinstance *)NULL;
}
doset(ckt, typecode, dev, mod, opt, val);
/* Call to CKTtemp(ckt) will be invoked here only by 'altermod' commands,
to set internal model parameters pParam of each instance for immediate use,
otherwise e.g. model->BSIM3vth0 will be set,
but not pParam of any BSIM3 instance.
May contain side effects because call is abundant. h_vogt 110101
*/
if (do_model)
CKTtemp(ckt);
}
static struct variable *

View File

@ -16,6 +16,10 @@ Modified: 2000 AlansFixes
#include "fteext.h"
#include "missing_math.h"
/* for setting breakpoints required by dbs data base */
extern struct dbcomm *dbs;
#include "ftedebug.h"
#ifdef XSPICE
/* gtri - add - wbk - Add headers */
#include "miftypes.h"
@ -153,6 +157,22 @@ DCtran(CKTcircuit *ckt,
firsttime = 1;
save_mode = (ckt->CKTmode&MODEUIC) | MODETRANOP | MODEINITJCT;
save_order = ckt->CKTorder;
/* Add breakpoints here which have been requested by the user setting the
stop command as 'stop when time = xx'.
Get data from the global dbs data base.
*/
if (dbs) {
struct dbcomm *d;
for (d = dbs; d; d = d->db_next)
if ((d->db_type == DB_STOPWHEN) && cieq(d->db_nodename1,"time")
&& (d->db_value2 > 0)) {
CKTsetBreak(ckt, d->db_value2);
if (ft_ngdebug)
printf("breakpoint set to time = %g\n", d->db_value2);
}
}
#ifdef XSPICE
/* gtri - begin - wbk - set a breakpoint at end of supply ramping time */
/* must do this after CKTtime set to 0 above */
@ -175,10 +195,10 @@ DCtran(CKTcircuit *ckt,
/* gtri - end - wbk - Call EVTop if event-driven instances exist */
} else
#endif
converged = CKTop(ckt,
(ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITJCT,
(ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITFLOAT,
ckt->CKTdcMaxIter);
converged = CKTop(ckt,
(ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITJCT,
(ckt->CKTmode & MODEUIC) | MODETRANOP | MODEINITFLOAT,
ckt->CKTdcMaxIter);
if(converged != 0) {
fprintf(stdout,"\nTransient solution failed -\n");