diff --git a/.gitignore b/.gitignore
index fdcecdeb4..10731e4f7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,6 +37,10 @@ Makefile.in
/missing
/ylwrap
/ar-lib
+/ngspice.pc
+
+/src/frontend/parse-bison.*
+/src/spicelib/parser/inpptree-parser.*
/src/include/ngspice/config.h.in
/src/include/ngspice/config.h
diff --git a/Makefile.am b/Makefile.am
index 1d204fd58..3a7b0d186 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -17,7 +17,7 @@ EXTRA_DIST = FAQ autogen.sh Stuarts_Poly_Notes \
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 ar-lib compile config.guess \
src/include/ngspice/config.h.in config.sub configure install-sh \
missing mkinstalldirs stamp-h.in ltconfig \
- ltmain.sh depcomp ylwrap
+ ltmain.sh depcomp ylwrap ngspice.pc
ACLOCAL_AMFLAGS = -I m4
diff --git a/compile_linux.sh b/compile_linux.sh
index 5634c5f36..5341bed14 100644
--- a/compile_linux.sh
+++ b/compile_linux.sh
@@ -19,6 +19,8 @@
# Add (optionally) --enable-relpath to avoid absolute paths when searching for code models.
# It might be necessary to uncomment and run ./autogen.sh .
+SECONDS=0
+
if test "$1" = "32"; then
if [ ! -d "release32" ]; then
mkdir release32
@@ -75,5 +77,8 @@ make install 2>&1 | tee make_install.log
exitcode=${PIPESTATUS[0]}
if [ $exitcode -ne 0 ]; then echo "make install failed"; exit 1 ; fi
+ELAPSED="Elapsed compile time: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec"
+echo
+echo $ELAPSED
echo "success"
exit 0
diff --git a/examples/Monte_Carlo/MC_ring_ts.sp b/examples/Monte_Carlo/MC_ring_ts.sp
index ee88c3296..b23dcf9b4 100644
--- a/examples/Monte_Carlo/MC_ring_ts.sp
+++ b/examples/Monte_Carlo/MC_ring_ts.sp
@@ -124,16 +124,17 @@ if $?batchmode
rusage
quit
else
+ set nolegend
if $?sharedmode or $?win_console
- gnuplot xnp_pl1 {$plot_out}.vout0 $ just plot the tran output with nominal parameters
+ gnuplot xnp_pl1 {$plot_out}.vout0 ylabel vout0 $ just plot the tran output with nominal parameters
else
- plot {$plot_out}.vout0 $ just plot the tran output with nominal parameters
+ plot {$plot_out}.vout0 ylabel vout0 $ just plot the tran output with nominal parameters
end
setplot $plot_fft
if $?sharedmode or $?win_console
- gnuplot xnp_pl2 db(mag(ally)) xlimit 0 1G ylimit -80 10
+ gnuplot xnp_pl2 db(mag(ally)) ylabel 'output voltage versus frequency' xlimit 0 1G ylimit -80 10
else
- plot db(mag(ally)) xlimit 0 1G ylimit -80 10
+ plot db(mag(ally)) xlimit 0 1G ylimit -80 10 ylabel 'output voltage versus frequency'
end
*
* create a histogram from vector maxffts
@@ -166,9 +167,10 @@ else
* plot the histogram
let count = yvec - 1 $ subtract 1 because we started with unitvec containing ones
if $?sharedmode or $?win_console
- gnuplot np_pl3 count vs osc_frequ combplot
+ gnuplot np_pl3 count vs osc_frequ combplot ylabel 'counts per bin'
else
- plot count vs osc_frequ combplot
+ set xbrushwidth=5
+ plot count vs osc_frequ combplot ylabel 'counts per bin'
end
* calculate jitter
let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6
diff --git a/examples/p-to-n-examples/.spiceinit b/examples/p-to-n-examples/.spiceinit
new file mode 100644
index 000000000..b78bb0201
--- /dev/null
+++ b/examples/p-to-n-examples/.spiceinit
@@ -0,0 +1 @@
+set ngbehavior=psa
diff --git a/examples/vdmos/100W.sp b/examples/vdmos/100W.sp
index 403436643..5a898f9c9 100644
--- a/examples/vdmos/100W.sp
+++ b/examples/vdmos/100W.sp
@@ -5,9 +5,9 @@
*R24 & R25 are optional output offset trimming
*
VTamb tamb 0 25
-MQ1 +V N010 N012 tn tcn IRFP240 tnodeout
+MQ1 +V N010 N012 tn tcn IRFP240 thermal
X1 tcn tamb case-ambient
-MQ2 -V N020 N017 tp tcp IRFP9240 tnodeout
+MQ2 -V N020 N017 tp tcp IRFP9240 thermal
X2 tcp tamb case-ambient
R1 OUT N017 .33
R2 N012 OUT .33
diff --git a/examples/vdmos/self-heating.sp b/examples/vdmos/self-heating.sp
index 535a3eb8d..463d3072d 100644
--- a/examples/vdmos/self-heating.sp
+++ b/examples/vdmos/self-heating.sp
@@ -1,5 +1,5 @@
VDMOS self heating test
-M1 D G 0 tj tc IRFP240 tnodeout
+M1 D G 0 tj tc IRFP240 thermal
rthk tc 0 0.05
VG G 0 5V Pulse 0 10 0 1m 1m 100m 200m
*RD D D1 4
diff --git a/src/Makefile.am b/src/Makefile.am
index c3ecdf00c..17a07420a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -260,6 +260,7 @@ endif !NO_HELP
ngsconvert_SOURCES = ngsconvert.c
ngsconvert_LDADD = \
+ frontend/com_history.lo \
frontend/libfte.la \
frontend/parser/libparser.la \
maths/misc/libmathmisc.la \
@@ -271,6 +272,7 @@ ngsconvert_LDADD = \
ngproc2mod_SOURCES = ngproc2mod.c
ngproc2mod_LDADD = \
+ frontend/libfte.la \
frontend/parser/libparser.la \
spicelib/parser/libinp.la \
misc/libmisc.la
@@ -281,6 +283,8 @@ ngproc2mod_LDADD = \
ngmultidec_SOURCES = ngmultidec.c
ngmultidec_LDADD = \
+ frontend/libfte.la \
+ frontend/parser/libparser.la \
maths/sparse/libsparse.la \
misc/libmisc.la
@@ -289,6 +293,11 @@ ngmultidec_LDADD = \
ngmakeidx_SOURCES = makeidx.c
+ngmakeidx_LDADD = \
+ frontend/libfte.la \
+ frontend/parser/libparser.la \
+ misc/libmisc.la
+
## create index for online help:
ngspice.idx: ngmakeidx$(EXEEXT) $(srcdir)/ngspice.txt
diff --git a/src/frontend/device.c b/src/frontend/device.c
index 809d9f24a..608fcbbea 100644
--- a/src/frontend/device.c
+++ b/src/frontend/device.c
@@ -1095,6 +1095,7 @@ if_set_binned_model(CKTcircuit *ckt, char *devname, char *param, struct dvec *va
return;
}
w = v->va_V.vV_real;
+ free_struct_variable(v);
v = if_getparam(ckt, &devname, "l", 0, 0);
if (!v) {
@@ -1102,6 +1103,7 @@ if_set_binned_model(CKTcircuit *ckt, char *devname, char *param, struct dvec *va
return;
}
l = v->va_V.vV_real;
+ free_struct_variable(v);
if (param[0] == 'w')
w = *val->v_realdata; /* overwrite the width with the alter param */
diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c
index ea5a05bcf..1ed3f7bcb 100644
--- a/src/frontend/inpcom.c
+++ b/src/frontend/inpcom.c
@@ -4088,7 +4088,7 @@ static int get_number_terminals(char *c)
char *inst = gettok_instance(&c);
strncpy(nam_buf, inst, sizeof(nam_buf) - 1);
txfree(inst);
- if (strstr(nam_buf, "off") || strchr(nam_buf, '=') || strstr(nam_buf, "tnodeout"))
+ if (strstr(nam_buf, "off") || strchr(nam_buf, '=') || strstr(nam_buf, "tnodeout") || strstr(nam_buf, "thermal"))
break;
i++;
}
@@ -6964,16 +6964,16 @@ static int inp_vdmos_model(struct card *deck)
card->line = new_line;
wl_free(wlb);
}
- /* we have a VDMOS instance line with 'tnodeout' and thus need exactly 5 nodes
+ /* we have a VDMOS instance line with 'thermal' flag and thus need exactly 5 nodes
*/
- else if (strstr(curr_line, "tnodeout")) {
+ else if (curr_line[0] == 'm' && strstr(curr_line, "thermal")) {
for (i = 0; i < 7; i++)
curr_line = nexttok(curr_line);
- if (!ciprefix("tnodeout", curr_line)) {
+ if (!ciprefix("thermal", curr_line)) {
fprintf(cp_err,
"Error: We need exactly 5 nodes\n"
" drain, gate, source, tjunction, tcase\n"
- " in VDMOS instance line\n"
+ " in VDMOS instance line with thermal model\n"
" %s\n", card->line);
return 1;
}
diff --git a/src/frontend/parser/glob.c b/src/frontend/parser/glob.c
index caddc6784..ecdbd2075 100644
--- a/src/frontend/parser/glob.c
+++ b/src/frontend/parser/glob.c
@@ -66,7 +66,7 @@ static wordlist_l *brac1(size_t offset_ocurl1, const char *p_str_cur);
static wordlist_l *brac2(const char *string,
size_t *p_n_char_processed);
static wordlist *bracexpand(const wordlist *w_exp);
-static void merge_home_with_rest(wordlist *wl_node,
+static inline void merge_home_with_rest(wordlist *wl_node,
size_t n_char_home, const char *sz_home, size_t n_char_skip);
static inline void strip_1st_char(wordlist *wl_node);
static void tilde_expand_word(wordlist *wl_node);
diff --git a/src/frontend/plotting/plotit.c b/src/frontend/plotting/plotit.c
index 5ded37c6e..cd8166f1c 100644
--- a/src/frontend/plotting/plotit.c
+++ b/src/frontend/plotting/plotit.c
@@ -354,7 +354,7 @@ bool plotit(wordlist *wl, const char *hcopy, const char *devname)
}
if (nylabel) {
rc_ds |= ds_cat_printf(&ds_cline, " ylabel '%s'", nylabel);
- tfree(nxlabel);
+ tfree(nylabel);
}
if (ntitle) {
rc_ds |= ds_cat_printf(&ds_cline, " title '%s'", ntitle);
@@ -1146,6 +1146,8 @@ quit:
ds_free(&ds_cline); /* free dstring resources, if any */
free_pnode(names);
FREE(title);
+ FREE(xlabel);
+ FREE(ylabel);
quit1:
/* Free any vectors left behing while parsing the plot arguments. These
diff --git a/src/frontend/runcoms2.c b/src/frontend/runcoms2.c
index 7229749e1..cb42e38ab 100644
--- a/src/frontend/runcoms2.c
+++ b/src/frontend/runcoms2.c
@@ -27,6 +27,10 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
#include "ngspice/inpdefs.h"
+#if defined(XSPICE) && defined(SIMULATOR)
+#include "ngspice/evtproto.h"
+#endif
+
extern void line_free_x(struct card *deck, bool recurse);
extern INPmodel *modtab;
@@ -237,6 +241,11 @@ com_remcirc(wordlist *wl)
/* The next lines stem from com_rset */
INPkillMods();
+#if defined(XSPICE) && defined(SIMULATOR)
+ /* remove event queues, if XSPICE and not nutmeg */
+ EVTunsetup(ft_curckt->ci_ckt);
+#endif
+
if_cktfree(ft_curckt->ci_ckt, ft_curckt->ci_symtab);
for (v = ft_curckt->ci_vars; v; v = next) {
next = v->va_next;
diff --git a/src/include/ngspice/evtproto.h b/src/include/ngspice/evtproto.h
index d1569061b..a961db1da 100644
--- a/src/include/ngspice/evtproto.h
+++ b/src/include/ngspice/evtproto.h
@@ -65,6 +65,7 @@ void EVTtermInsert(
char **err_msg);
int EVTsetup(CKTcircuit *ckt);
+int EVTunsetup(CKTcircuit* ckt);
int EVTdest(Evt_Ckt_Data_t *evt);
diff --git a/src/ngproc2mod.c b/src/ngproc2mod.c
index 4321801bf..e7d2688f1 100644
--- a/src/ngproc2mod.c
+++ b/src/ngproc2mod.c
@@ -329,3 +329,6 @@ retry:
}
}
}
+
+void
+controlled_exit(int status) { exit(status); }
diff --git a/src/ngsconvert.c b/src/ngsconvert.c
index 88bfcfb91..f8a7a5176 100644
--- a/src/ngsconvert.c
+++ b/src/ngsconvert.c
@@ -436,7 +436,7 @@ void cp_ccon(bool o) { NG_IGNORE(o); }
char*if_errstring(int c) { NG_IGNORE(c); return copy("error"); }
void out_printf(char *fmt, ...) { NG_IGNORE(fmt); }
void out_send(char *string) { NG_IGNORE(string); }
-struct variable * cp_enqvar(char *word, int *tbfreed) { NG_IGNORE(word); NG_IGNORE(*tbfreed); return (NULL); }
+struct variable * cp_enqvar(const char *word, int *tbfreed) { NG_IGNORE(word); NG_IGNORE(*tbfreed); return (NULL); }
struct dvec *vec_get(const char *word) { NG_IGNORE(word); return (NULL); }
void cp_ccom(wordlist *w, char *b, bool e) {
NG_IGNORE(e);
@@ -445,6 +445,7 @@ void cp_ccom(wordlist *w, char *b, bool e) {
int cp_usrset(struct variable *v, bool i) {
NG_IGNORE(i);
NG_IGNORE(v); return(US_OK); }
+wordlist * cp_doalias(wordlist *wlist) {NG_IGNORE(wlist); return NULL;}
int disptype;
diff --git a/src/spicelib/analysis/dctran.c b/src/spicelib/analysis/dctran.c
index 5515b149d..6e6a03f77 100644
--- a/src/spicelib/analysis/dctran.c
+++ b/src/spicelib/analysis/dctran.c
@@ -275,7 +275,10 @@ DCtran(CKTcircuit *ckt,
fflush(stdout);
}
- if(converged != 0) return(converged);
+ if (converged != 0) {
+ SPfrontEnd->OUTendPlot(job->TRANplot);
+ return(converged);
+ }
#ifdef XSPICE
/* gtri - add - wbk - 12/19/90 - Add IPC stuff */
diff --git a/src/spicelib/devices/bjt/bjt.c b/src/spicelib/devices/bjt/bjt.c
index fc86aa6c3..33374b14f 100644
--- a/src/spicelib/devices/bjt/bjt.c
+++ b/src/spicelib/devices/bjt/bjt.c
@@ -175,10 +175,13 @@ IFparm BJTmPTable[] = { /* model parameters */
IOP("tnr1", BJT_MOD_TNR1, IF_REAL, "NR 1. temperature coefficient"),
IOP("tnr2", BJT_MOD_TNR2, IF_REAL, "NR 2. temperature coefficient"),
IOP("trb1", BJT_MOD_TRB1, IF_REAL, "RB 1. temperature coefficient"),
+ IOPR("trb", BJT_MOD_TRB1, IF_REAL, "RB 1. temperature coefficient"),
IOP("trb2", BJT_MOD_TRB2, IF_REAL, "RB 2. temperature coefficient"),
IOP("trc1", BJT_MOD_TRC1, IF_REAL, "RC 1. temperature coefficient"),
+ IOPR("trc", BJT_MOD_TRC1, IF_REAL, "RC 1. temperature coefficient"),
IOP("trc2", BJT_MOD_TRC2, IF_REAL, "RC 2. temperature coefficient"),
IOP("tre1", BJT_MOD_TRE1, IF_REAL, "RE 1. temperature coefficient"),
+ IOPR("tre", BJT_MOD_TRE1, IF_REAL, "RE 1. temperature coefficient"),
IOP("tre2", BJT_MOD_TRE2, IF_REAL, "RE 2. temperature coefficient"),
IOP("trm1", BJT_MOD_TRM1, IF_REAL, "RBM 1. temperature coefficient"),
IOP("trm2", BJT_MOD_TRM2, IF_REAL, "RBM 2. temperature coefficient"),
diff --git a/src/spicelib/devices/vdmos/vdmos.c b/src/spicelib/devices/vdmos/vdmos.c
index d6802652b..12dfd1b45 100644
--- a/src/spicelib/devices/vdmos/vdmos.c
+++ b/src/spicelib/devices/vdmos/vdmos.c
@@ -22,7 +22,7 @@ IFparm VDMOSpTable[] = { /* parameters */
IOPU("dtemp", VDMOS_DTEMP, IF_REAL, "Instance temperature difference"),
IP( "ic", VDMOS_IC, IF_REALVEC, "Vector of D-S, G-S voltages"),
- IOP("tnodeout", VDMOS_TNODEOUT, IF_FLAG, "Thermal model switch on/off"),
+ IOP("thermal", VDMOS_THERMAL, IF_FLAG, "Thermal model switch on/off"),
OP( "id", VDMOS_CD, IF_REAL, "Drain current"),
OP( "is", VDMOS_CS, IF_REAL, "Source current"),
diff --git a/src/spicelib/devices/vdmos/vdmosacld.c b/src/spicelib/devices/vdmos/vdmosacld.c
index 2a95a90e2..9e20e29ad 100644
--- a/src/spicelib/devices/vdmos/vdmosacld.c
+++ b/src/spicelib/devices/vdmos/vdmosacld.c
@@ -35,7 +35,7 @@ VDMOSacLoad(GENmodel *inModel, CKTcircuit *ckt)
for(here = VDMOSinstances(model); here!= NULL;
here = VDMOSnextInstance(here)) {
- selfheat = (here->VDMOStnodeoutGiven) && (model->VDMOSrthjcGiven);
+ selfheat = (here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven);
if (here->VDMOSmode < 0) {
xnrm=0;
xrev=1;
diff --git a/src/spicelib/devices/vdmos/vdmosask.c b/src/spicelib/devices/vdmos/vdmosask.c
index 597192fc3..4db205518 100644
--- a/src/spicelib/devices/vdmos/vdmosask.c
+++ b/src/spicelib/devices/vdmos/vdmosask.c
@@ -50,8 +50,8 @@ VDMOSask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value,
case VDMOS_OFF:
value->iValue = here->VDMOSoff;
return(OK);
- case VDMOS_TNODEOUT:
- value->iValue = here->VDMOStnodeout;
+ case VDMOS_THERMAL:
+ value->iValue = here->VDMOSthermal;
return(OK);
case VDMOS_IC_VDS:
value->rValue = here->VDMOSicVDS;
diff --git a/src/spicelib/devices/vdmos/vdmosdefs.h b/src/spicelib/devices/vdmos/vdmosdefs.h
index 5e227f90b..ffdae728b 100644
--- a/src/spicelib/devices/vdmos/vdmosdefs.h
+++ b/src/spicelib/devices/vdmos/vdmosdefs.h
@@ -64,7 +64,7 @@ typedef struct sVDMOSinstance {
double VDMOSdsConductance; /*conductance of drain to source:set in setup*/
double VDMOStemp; /* operating temperature of this instance */
double VDMOSdtemp; /* operating temperature of the instance relative to circuit temperature*/
- int VDMOStnodeout; /* flag indicate self heating on */
+ int VDMOSthermal; /* flag indicate self heating on */
double VDMOStTransconductance; /* temperature corrected transconductance*/
double VDMOStPhi; /* temperature corrected Phi */
@@ -157,7 +157,7 @@ typedef struct sVDMOSinstance {
unsigned VDMOSsNodePrimeSet :1;
unsigned VDMOSicVDSGiven :1;
unsigned VDMOSicVGSGiven :1;
- unsigned VDMOStnodeoutGiven : 1; /* flag indicate self heating on */
+ unsigned VDMOSthermalGiven : 1; /* flag indicate self heating on */
unsigned VDMOSvonGiven : 1;
unsigned VDMOSvdsatGiven :1;
unsigned VDMOSmodeGiven :1;
@@ -440,7 +440,7 @@ enum {
VDMOS_TEMP,
VDMOS_M,
VDMOS_DTEMP,
- VDMOS_TNODEOUT,
+ VDMOS_THERMAL,
};
/* model parameters */
diff --git a/src/spicelib/devices/vdmos/vdmosload.c b/src/spicelib/devices/vdmos/vdmosload.c
index 042a31178..f0b6d4578 100644
--- a/src/spicelib/devices/vdmos/vdmosload.c
+++ b/src/spicelib/devices/vdmos/vdmosload.c
@@ -104,7 +104,7 @@ VDMOSload(GENmodel *inModel, CKTcircuit *ckt)
for (here = VDMOSinstances(model); here != NULL;
here = VDMOSnextInstance(here)) {
- selfheat = (here->VDMOStnodeoutGiven) && (model->VDMOSrthjcGiven);
+ selfheat = (here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven);
if (selfheat)
Check_mos = 1;
else
diff --git a/src/spicelib/devices/vdmos/vdmosnoi.c b/src/spicelib/devices/vdmos/vdmosnoi.c
index 48fe0dda8..3d96af5bb 100644
--- a/src/spicelib/devices/vdmos/vdmosnoi.c
+++ b/src/spicelib/devices/vdmos/vdmosnoi.c
@@ -91,7 +91,7 @@ VDMOSnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt,
switch (mode) {
case N_DENS:
- if ((inst->VDMOStnodeoutGiven) && (model->VDMOSrthjcGiven))
+ if ((inst->VDMOSthermalGiven) && (model->VDMOSrthjcGiven))
tempRatioSH = inst->VDMOSTempSH / ckt->CKTtemp;
else
tempRatioSH = 1.0;
diff --git a/src/spicelib/devices/vdmos/vdmospar.c b/src/spicelib/devices/vdmos/vdmospar.c
index ad57b8c09..fef9de1bf 100644
--- a/src/spicelib/devices/vdmos/vdmospar.c
+++ b/src/spicelib/devices/vdmos/vdmospar.c
@@ -61,9 +61,9 @@ VDMOSparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
here->VDMOSicVGS = value->rValue;
here->VDMOSicVGSGiven = TRUE;
break;
- case VDMOS_TNODEOUT:
- here->VDMOStnodeout = (value->iValue != 0);
- here->VDMOStnodeoutGiven = TRUE;
+ case VDMOS_THERMAL:
+ here->VDMOSthermal = (value->iValue != 0);
+ here->VDMOSthermalGiven = TRUE;
break;
case VDMOS_IC:
switch(value->v.numValue){
diff --git a/src/spicelib/devices/vdmos/vdmosset.c b/src/spicelib/devices/vdmos/vdmosset.c
index 1bd415a91..37050c500 100644
--- a/src/spicelib/devices/vdmos/vdmosset.c
+++ b/src/spicelib/devices/vdmos/vdmosset.c
@@ -342,7 +342,7 @@ VDMOSsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt,
here->VDIOposPrimeNode = here->VDMOSsNode;
}
- if ((here->VDMOStnodeoutGiven) && (model->VDMOSrthjcGiven)) {
+ if ((here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven)) {
if (here->VDMOStempNode == -1) {
error = CKTmkVolt(ckt,&tmp,here->VDMOSname,"Tj");
if (error) return(error);
@@ -374,7 +374,7 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
return(E_NOMEM);\
} } while(0)
- if ((here->VDMOStnodeoutGiven) && (model->VDMOSrthjcGiven)) {
+ if ((here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven)) {
TSTALLOC(VDMOSTemptempPtr, VDMOStempNode, VDMOStempNode);
TSTALLOC(VDMOSTempdpPtr, VDMOStempNode, VDMOSdNodePrime);
TSTALLOC(VDMOSTempspPtr, VDMOStempNode, VDMOSsNodePrime);
@@ -458,7 +458,7 @@ VDMOSunsetup(GENmodel *inModel, CKTcircuit *ckt)
CKTdltNNum(ckt, here->VDIOposPrimeNode);
here->VDIOposPrimeNode = 0;
- if ((here->VDMOStnodeoutGiven) && (model->VDMOSrthjcGiven)) {
+ if ((here->VDMOSthermalGiven) && (model->VDMOSrthjcGiven)) {
if (here->VDMOStNodePrime > 0)
CKTdltNNum(ckt, here->VDMOStNodePrime);
here->VDMOStNodePrime = 0;
diff --git a/src/xspice/evt/evtsetup.c b/src/xspice/evt/evtsetup.c
index d078ad549..4414b66bc 100644
--- a/src/xspice/evt/evtsetup.c
+++ b/src/xspice/evt/evtsetup.c
@@ -135,6 +135,29 @@ int EVTsetup(
}
+int EVTunsetup(
+ CKTcircuit* ckt) /* The circuit structure */
+{
+ int err;
+
+ /* Exit immediately if no event-driven instances in circuit */
+ if (ckt->evt->counts.num_insts == 0)
+ return(OK);
+
+ /* Clear the inst, node, and output queues, and initialize the to_call */
+ /* elements in the instance queue to call all event-driven instances */
+ err = EVTsetup_queues(ckt);
+ if (err)
+ return(err);
+
+ /* Initialize additional event data */
+ g_mif_info.circuit.evt_step = 0.0;
+
+ /* Return OK */
+ return(OK);
+}
+
+
/*
diff --git a/src/xspice/icm/GNUmakefile.in b/src/xspice/icm/GNUmakefile.in
index 7d3331db6..ad4a2734a 100644
--- a/src/xspice/icm/GNUmakefile.in
+++ b/src/xspice/icm/GNUmakefile.in
@@ -93,8 +93,10 @@ cm-deps := \
cm-descr := \
$(cm)/cmextrn.h \
$(cm)/cminfo.h \
+ $(cm)/cminfo2.h \
$(cm)/udnextrn.h \
$(cm)/udninfo.h \
+ $(cm)/udninfo2.h \
$(cm)/objects.inc
diff --git a/src/xspice/icm/analog/.gitignore b/src/xspice/icm/analog/.gitignore
index abef3a30c..fda83b3e8 100644
--- a/src/xspice/icm/analog/.gitignore
+++ b/src/xspice/icm/analog/.gitignore
@@ -2,10 +2,12 @@
/cmextrn.h
/cminfo.h
+/cminfo2.h
/dlmain.c
/objects.inc
/udnextrn.h
/udninfo.h
+/udninfo2.h
/*/*.c
diff --git a/src/xspice/icm/digital/.gitignore b/src/xspice/icm/digital/.gitignore
index a766619af..758076c5d 100644
--- a/src/xspice/icm/digital/.gitignore
+++ b/src/xspice/icm/digital/.gitignore
@@ -2,10 +2,12 @@
/cmextrn.h
/cminfo.h
+/cminfo2.h
/dlmain.c
/objects.inc
/udnextrn.h
/udninfo.h
+/udninfo2.h
/*/*.c
diff --git a/src/xspice/icm/spice2poly/.gitignore b/src/xspice/icm/spice2poly/.gitignore
index 27b44acbe..9b60b041f 100644
--- a/src/xspice/icm/spice2poly/.gitignore
+++ b/src/xspice/icm/spice2poly/.gitignore
@@ -2,10 +2,12 @@
/cmextrn.h
/cminfo.h
+/cminfo2.h
/dlmain.c
/objects.inc
/udnextrn.h
/udninfo.h
+/udninfo2.h
/*/*.c
diff --git a/src/xspice/icm/table/.gitignore b/src/xspice/icm/table/.gitignore
new file mode 100644
index 000000000..00a3641ed
--- /dev/null
+++ b/src/xspice/icm/table/.gitignore
@@ -0,0 +1,11 @@
+/table.cm
+
+/cmextrn.h
+/cminfo.h
+/cminfo2.h
+/objects.inc
+/udnextrn.h
+/udninfo.h
+/udninfo2.h
+
+/*/*.c
diff --git a/src/xspice/icm/xtradev/.gitignore b/src/xspice/icm/xtradev/.gitignore
index efea9c1c9..b803004ac 100644
--- a/src/xspice/icm/xtradev/.gitignore
+++ b/src/xspice/icm/xtradev/.gitignore
@@ -2,10 +2,12 @@
/cmextrn.h
/cminfo.h
+/cminfo2.h
/dlmain.c
/objects.inc
/udnextrn.h
/udninfo.h
+/udninfo2.h
/*/*.c
diff --git a/src/xspice/icm/xtraevt/.gitignore b/src/xspice/icm/xtraevt/.gitignore
index a27aace1d..352f6580d 100644
--- a/src/xspice/icm/xtraevt/.gitignore
+++ b/src/xspice/icm/xtraevt/.gitignore
@@ -2,10 +2,12 @@
/cmextrn.h
/cminfo.h
+/cminfo2.h
/dlmain.c
/objects.inc
/udnextrn.h
/udninfo.h
+/udninfo2.h
/*/*.c
diff --git a/visualc/sharedspice.vcxproj b/visualc/sharedspice.vcxproj
index 212541ec4..65b24589f 100644
--- a/visualc/sharedspice.vcxproj
+++ b/visualc/sharedspice.vcxproj
@@ -456,7 +456,6 @@
-
@@ -1062,7 +1061,6 @@
-
diff --git a/visualc/vngspice-fftw.vcxproj b/visualc/vngspice-fftw.vcxproj
index e197090a0..3df7199ad 100644
--- a/visualc/vngspice-fftw.vcxproj
+++ b/visualc/vngspice-fftw.vcxproj
@@ -914,6 +914,7 @@ lib /machine:x64 /def:..\..\fftw-3.3-dll64\libfftw3-3.def /out:$(IntDir)libfftw3
+
@@ -931,6 +932,7 @@ lib /machine:x64 /def:..\..\fftw-3.3-dll64\libfftw3-3.def /out:$(IntDir)libfftw3
+
@@ -1522,6 +1524,7 @@ lib /machine:x64 /def:..\..\fftw-3.3-dll64\libfftw3-3.def /out:$(IntDir)libfftw3
+