SIGSEGV handling for Windows

This commit is contained in:
h_vogt 2009-05-02 09:40:33 +00:00
parent bdbee943bf
commit 4ef61a65cf
6 changed files with 207 additions and 176 deletions

View File

@ -1,3 +1,10 @@
2009-05-02 Holger Vogt
* configure.in: new flag NGDEBUG
main.c, signal_handler.c, visualc/vngspice.vcproj:
restore SIGSEGV signal handling for error message after seg fault
(not in debug mode, now only for Windows)
dctrcurv: winmessage about dc
2009-05-01 Holger Vogt
* cktdojob.c, cktsopt.c: moved to cktsopt.c:
maxord set to min 2 or max 6

View File

@ -211,6 +211,7 @@ if test "$enable_debug" = "no"; then
CFLAGS="$ext_CFLAGS -O2"
fi
else
AC_DEFINE(NGDEBUG,1,[Compile with debug info])
if test "x$GCC" = "xyes"; then
CFLAGS="$ext_CFLAGS -g -O0 -Wall"
else

View File

@ -17,6 +17,10 @@ Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
#include <signal.h>
#include "signal_handler.h"
#ifdef HAS_WINDOWS
void winmessage(char* new_msg);
#endif
#ifdef HAVE_GNUREADLINE
/* Added GNU Readline Support 11/3/97 -- Andrew Veliath <veliaa@rpi.edu> */
/* from spice3f4 patch to ng-spice. jmr */
@ -133,6 +137,9 @@ RETSIGTYPE
sigsegv(void)
{
fprintf(cp_err, "\ninternal error -- segmentation violation\n");
#ifdef HAS_WINDOWS
winmessage("Fatal error in NGSPICE");
#endif
fatal();
}

View File

@ -939,10 +939,9 @@ main(int argc, char **argv)
#ifdef SIGBUS
signal(SIGBUS, (SIGNAL_FUNCTION) sigbus);
#endif
#ifdef SIGSEGV
/* Want core files!
* signal(SIGSEGV, sigsegv);
*/
#if defined(SIGSEGV) && !defined(NGDEBUG) && defined(HAS_WINDOWS)
/* Allow a comment and graceful shutdown after seg fault */
signal(SIGSEGV, sigsegv);
#endif
#ifdef SIGSYS
signal(SIGSYS, (SIGNAL_FUNCTION) sig_sys);

View File

@ -25,6 +25,11 @@ Modified: 1999 Paolo Nenzi
#include <devdefs.h>
extern SPICEdev **DEVices;
#ifdef HAS_WINDOWS
void SetAnalyse( char * Analyse, int Percent);
static double actval, actdiff;
#endif
int
DCtrCurv(CKTcircuit *ckt, int restart)
@ -61,10 +66,10 @@ DCtrCurv(CKTcircuit *ckt, int restart)
if(!restart && cv->TRCVnestState >= 0) {
/* continuing */
i = cv->TRCVnestState;
/* resume to work? saj*/
error = (*(SPfrontEnd->OUTpBeginPlot))((void *)ckt,
(void*)ckt->CKTcurJob, ckt->CKTcurJob->JOBname,
varUid,IF_REAL,666,nameList, 666,&plot);
/* resume to work? saj*/
error = (*(SPfrontEnd->OUTpBeginPlot))((void *)ckt,
(void*)ckt->CKTcurJob, ckt->CKTcurJob->JOBname,
varUid,IF_REAL,666,nameList, 666,&plot);
goto resume;
}
ckt->CKTtime = 0;
@ -85,17 +90,17 @@ DCtrCurv(CKTcircuit *ckt, int restart)
RESmodel *model;
for(model = (RESmodel *)ckt->CKThead[rcode];model != NULL;
model=model->RESnextModel){
model=model->RESnextModel){
for(here=model->RESinstances;here!=NULL;
here=here->RESnextInstance) {
here=here->RESnextInstance) {
if(here->RESname == cv->TRCVvName[i]) {
cv->TRCVvElt[i] = (GENinstance *)here;
cv->TRCVvSave[i] = here->RESresist;
cv->TRCVgSave[i] = here->RESresGiven;
cv->TRCVgSave[i] = here->RESresGiven;
cv->TRCVvType[i] = rcode;
here->RESresist = cv->TRCVvStart[i];
here->RESresGiven = 1;
CKTtemp(ckt);
CKTtemp(ckt);
goto found;
}
}
@ -113,7 +118,7 @@ DCtrCurv(CKTcircuit *ckt, int restart)
if(here->VSRCname == cv->TRCVvName[i]) {
cv->TRCVvElt[i] = (GENinstance *)here;
cv->TRCVvSave[i] = here->VSRCdcValue;
cv->TRCVgSave[i] = here->VSRCdcGiven;
cv->TRCVgSave[i] = here->VSRCdcGiven;
cv->TRCVvType[i] = vcode;
here->VSRCdcValue = cv->TRCVvStart[i];
here->VSRCdcGiven = 1;
@ -134,7 +139,7 @@ DCtrCurv(CKTcircuit *ckt, int restart)
if(here->ISRCname == cv->TRCVvName[i]) {
cv->TRCVvElt[i] = (GENinstance *)here;
cv->TRCVvSave[i] = here->ISRCdcValue;
cv->TRCVgSave[i] = here->ISRCdcGiven;
cv->TRCVgSave[i] = here->ISRCdcGiven;
cv->TRCVvType[i] = icode;
here->ISRCdcValue = cv->TRCVvStart[i];
here->ISRCdcGiven = 1;
@ -143,16 +148,16 @@ DCtrCurv(CKTcircuit *ckt, int restart)
}
}
}
if(!strcmp(cv->TRCVvName[i], "temp"))
{
cv->TRCVvSave[i]=ckt->CKTtemp; /* Saves the old circuit temperature */
cv->TRCVvType[i]=TEMP_CODE; /* Set the sweep type code */
ckt->CKTtemp = cv->TRCVvStart[i] + CONSTCtoK; /* Set the new circuit temp */
CKTtemp(ckt);
CKTtemp(ckt);
goto found;
}
(*(SPfrontEnd->IFerror))(ERR_FATAL,
"DCtrCurv: source / resistor %s not in circuit", &(cv->TRCVvName[i]));
return(E_NODEV);
@ -160,16 +165,21 @@ DCtrCurv(CKTcircuit *ckt, int restart)
found:;
}
#ifdef HAS_WINDOWS
actval = cv->TRCVvStart[cv->TRCVnestLevel];
actdiff = cv->TRCVvStart[cv->TRCVnestLevel] - cv->TRCVvStop[cv->TRCVnestLevel];
#endif
#ifdef XSPICE
/* gtri - add - wbk - 12/19/90 - Add IPC stuff and anal_init and anal_type */
/* Tell the beginPlot routine what mode we're in */
g_ipc.anal_type = IPC_ANAL_DCTRCURVE;
/* Tell the beginPlot routine what mode we're in */
g_ipc.anal_type = IPC_ANAL_DCTRCURVE;
/* Tell the code models what mode we're in */
g_mif_info.circuit.anal_type = MIF_DC;
/* Tell the code models what mode we're in */
g_mif_info.circuit.anal_type = MIF_DC;
g_mif_info.circuit.anal_init = MIF_TRUE;
g_mif_info.circuit.anal_init = MIF_TRUE;
/* gtri - end - wbk */
#endif
@ -180,35 +190,35 @@ found:;
if(error) return(error);
if (cv->TRCVvType[i]==vcode)
(*(SPfrontEnd->IFnewUid))((void *)ckt,&varUid,(IFuid )NULL,
if (cv->TRCVvType[i]==vcode)
(*(SPfrontEnd->IFnewUid))((void *)ckt,&varUid,(IFuid )NULL,
"v-sweep", UID_OTHER, (void **)NULL);
else {
if (cv->TRCVvType[i]==icode)
(*(SPfrontEnd->IFnewUid))((void *)ckt,&varUid,(IFuid )NULL,
else {
if (cv->TRCVvType[i]==icode)
(*(SPfrontEnd->IFnewUid))((void *)ckt,&varUid,(IFuid )NULL,
"i-sweep", UID_OTHER, (void **)NULL);
else {
if (cv->TRCVvType[i]==TEMP_CODE)
(*(SPfrontEnd->IFnewUid))((void *)ckt,&varUid,(IFuid )NULL,
"temp-sweep", UID_OTHER, (void **)NULL);
else {
if (cv->TRCVvType[i]==rcode)
(*(SPfrontEnd->IFnewUid))((void *)ckt,&varUid,(IFuid )NULL,
"res-sweep", UID_OTHER, (void **)NULL);
else {
if (cv->TRCVvType[i]==TEMP_CODE)
(*(SPfrontEnd->IFnewUid))((void *)ckt,&varUid,(IFuid )NULL,
"temp-sweep", UID_OTHER, (void **)NULL);
else {
if (cv->TRCVvType[i]==rcode)
(*(SPfrontEnd->IFnewUid))((void *)ckt,&varUid,(IFuid )NULL,
"res-sweep", UID_OTHER, (void **)NULL);
else
(*(SPfrontEnd->IFnewUid))((void *)ckt,&varUid,(IFuid )NULL,
"?-sweep", UID_OTHER, (void **)NULL);
} /* icode */
} /* TEMP_CODE */
} /* rcode*/
else
(*(SPfrontEnd->IFnewUid))((void *)ckt,&varUid,(IFuid )NULL,
"?-sweep", UID_OTHER, (void **)NULL);
} /* icode */
} /* TEMP_CODE */
} /* rcode*/
error = (*(SPfrontEnd->OUTpBeginPlot))((void *)ckt,
(void*)ckt->CKTcurJob, ckt->CKTcurJob->JOBname,
varUid,IF_REAL,numNames,nameList, IF_REAL,&plot);
(void*)ckt->CKTcurJob, ckt->CKTcurJob->JOBname,
varUid,IF_REAL,numNames,nameList, IF_REAL,&plot);
if(error) return(error);
/* now have finished the initialization - can start doing hard part */
@ -221,58 +231,58 @@ resume:
if(cv->TRCVvType[i]==vcode) { /* voltage source */
if((((VSRCinstance*)(cv->TRCVvElt[i]))->VSRCdcValue)*
SIGN(1.,cv->TRCVvStep[i]) -
SIGN(1.,cv->TRCVvStep[i]) * cv->TRCVvStop[i] >
DBL_EPSILON*1e+03)
{
i++ ;
firstTime=1;
ckt->CKTmode = (ckt->CKTmode & MODEUIC) |
MODEDCTRANCURVE | MODEINITJCT ;
if (i > cv->TRCVnestLevel ) break ;
goto nextstep;
}
SIGN(1.,cv->TRCVvStep[i]) -
SIGN(1.,cv->TRCVvStep[i]) * cv->TRCVvStop[i] >
DBL_EPSILON*1e+03)
{
i++ ;
firstTime=1;
ckt->CKTmode = (ckt->CKTmode & MODEUIC) |
MODEDCTRANCURVE | MODEINITJCT ;
if (i > cv->TRCVnestLevel ) break ;
goto nextstep;
}
} else if(cv->TRCVvType[i]==icode) { /* current source */
if((((ISRCinstance*)(cv->TRCVvElt[i]))->ISRCdcValue)*
SIGN(1.,cv->TRCVvStep[i]) -
SIGN(1.,cv->TRCVvStep[i]) * cv->TRCVvStop[i] >
DBL_EPSILON*1e+03)
{
i++ ;
firstTime=1;
ckt->CKTmode = (ckt->CKTmode & MODEUIC) |
MODEDCTRANCURVE | MODEINITJCT ;
if (i > cv->TRCVnestLevel ) break ;
goto nextstep;
}
} else if(cv->TRCVvType[i]==rcode) { /* resistance */
DBL_EPSILON*1e+03)
{
i++ ;
firstTime=1;
ckt->CKTmode = (ckt->CKTmode & MODEUIC) |
MODEDCTRANCURVE | MODEINITJCT ;
if (i > cv->TRCVnestLevel ) break ;
goto nextstep;
}
} else if(cv->TRCVvType[i]==rcode) { /* resistance */
if((((RESinstance*)(cv->TRCVvElt[i]))->RESresist)*
SIGN(1.,cv->TRCVvStep[i]) -
SIGN(1.,cv->TRCVvStep[i]) * cv->TRCVvStop[i]
> DBL_EPSILON*1e+03)
{
i++ ;
firstTime=1;
ckt->CKTmode = (ckt->CKTmode & MODEUIC) |
MODEDCTRANCURVE | MODEINITJCT ;
if (i > cv->TRCVnestLevel ) break ;
goto nextstep;
}
> DBL_EPSILON*1e+03)
{
i++ ;
firstTime=1;
ckt->CKTmode = (ckt->CKTmode & MODEUIC) |
MODEDCTRANCURVE | MODEINITJCT ;
if (i > cv->TRCVnestLevel ) break ;
goto nextstep;
}
} else if(cv->TRCVvType[i]==TEMP_CODE) { /* temp sweep */
if(((ckt->CKTtemp) - CONSTCtoK) * SIGN(1.,cv->TRCVvStep[i]) -
SIGN(1.,cv->TRCVvStep[i]) * cv->TRCVvStop[i] >
DBL_EPSILON*1e+03)
{
i++ ;
firstTime=1;
ckt->CKTmode = (ckt->CKTmode & MODEUIC) |
MODEDCTRANCURVE | MODEINITJCT ;
if (i > cv->TRCVnestLevel ) break ;
goto nextstep;
}
SIGN(1.,cv->TRCVvStep[i]) * cv->TRCVvStop[i] >
DBL_EPSILON*1e+03)
{
i++ ;
firstTime=1;
ckt->CKTmode = (ckt->CKTmode & MODEUIC) |
MODEDCTRANCURVE | MODEINITJCT ;
if (i > cv->TRCVnestLevel ) break ;
goto nextstep;
}
} /* else not possible */
while (i > 0) {
/* init(i); */
@ -280,30 +290,30 @@ resume:
if(cv->TRCVvType[i]==vcode) { /* voltage source */
((VSRCinstance *)(cv->TRCVvElt[i]))->VSRCdcValue =
cv->TRCVvStart[i];
} else if(cv->TRCVvType[i]==icode) { /* current source */
((ISRCinstance *)(cv->TRCVvElt[i]))->ISRCdcValue =
cv->TRCVvStart[i];
} else if(cv->TRCVvType[i]==TEMP_CODE) {
ckt->CKTtemp = cv->TRCVvStart[i] + CONSTCtoK;
CKTtemp(ckt);
} else if(cv->TRCVvType[i]==rcode) {
} else if(cv->TRCVvType[i]==rcode) {
((RESinstance *)(cv->TRCVvElt[i]))->RESresist =
cv->TRCVvStart[i];
((RESinstance *)(cv->TRCVvElt[i]))->RESconduct =
1/(((RESinstance *)(cv->TRCVvElt[i]))->RESresist);
/* Note: changing the resistance does nothing */
/* changing the conductance 1/r instead */
DEVices[rcode]->DEVload((GENmodel*)(cv->TRCVvElt[i]->GENmodPtr),ckt);
/*
* RESload((GENmodel*)(cv->TRCVvElt[i]->GENmodPtr),ckt);
*/
} /* else not possible */
((RESinstance *)(cv->TRCVvElt[i]))->RESconduct =
1/(((RESinstance *)(cv->TRCVvElt[i]))->RESresist);
/* Note: changing the resistance does nothing */
/* changing the conductance 1/r instead */
DEVices[rcode]->DEVload((GENmodel*)(cv->TRCVvElt[i]->GENmodPtr),ckt);
/*
* RESload((GENmodel*)(cv->TRCVvElt[i]->GENmodPtr),ckt);
*/
} /* else not possible */
}
/* Rotate state vectors. */
@ -316,69 +326,69 @@ resume:
/* do operation */
#ifdef XSPICE
/* gtri - begin - wbk - Do EVTop if event instances exist */
if(ckt->evt->counts.num_insts == 0) {
if(ckt->evt->counts.num_insts == 0) {
/* If no event-driven instances, do what SPICE normally does */
#endif
converged = NIiter(ckt,ckt->CKTdcTrcvMaxIter);
if(converged != 0) {
converged = CKTop(ckt,
(ckt->CKTmode&MODEUIC)|MODEDCTRANCURVE | MODEINITJCT,
(ckt->CKTmode&MODEUIC)|MODEDCTRANCURVE | MODEINITFLOAT,
ckt->CKTdcMaxIter);
converged = NIiter(ckt,ckt->CKTdcTrcvMaxIter);
if(converged != 0) {
return(converged);
converged = CKTop(ckt,
(ckt->CKTmode&MODEUIC)|MODEDCTRANCURVE | MODEINITJCT,
(ckt->CKTmode&MODEUIC)|MODEDCTRANCURVE | MODEINITFLOAT,
ckt->CKTdcMaxIter);
if(converged != 0) {
return(converged);
}
}
}
#ifdef XSPICE
}
else {
}
else {
/* else do new algorithm */
/* first get the current step in the analysis */
if(cv->TRCVvType[0] == vcode) {
g_mif_info.circuit.evt_step = ((VSRCinstance *)(cv->TRCVvElt[i]))
if(cv->TRCVvType[0] == vcode) {
g_mif_info.circuit.evt_step = ((VSRCinstance *)(cv->TRCVvElt[i]))
->VSRCdcValue ;
} else if(cv->TRCVvType[0] == icode) {
g_mif_info.circuit.evt_step = ((ISRCinstance *)(cv->TRCVvElt[i]))
} else if(cv->TRCVvType[0] == icode) {
g_mif_info.circuit.evt_step = ((ISRCinstance *)(cv->TRCVvElt[i]))
->ISRCdcValue ;
} else if(cv->TRCVvType[0] == rcode) {
g_mif_info.circuit.evt_step = ((RESinstance*)(cv->TRCVvElt[i]->GENmodPtr))
} else if(cv->TRCVvType[0] == rcode) {
g_mif_info.circuit.evt_step = ((RESinstance*)(cv->TRCVvElt[i]->GENmodPtr))
->RESresist;
} else if(cv->TRCVvType[0] == TEMP_CODE) {
g_mif_info.circuit.evt_step = ckt->CKTtemp - CONSTCtoK;
}
} else if(cv->TRCVvType[0] == TEMP_CODE) {
g_mif_info.circuit.evt_step = ckt->CKTtemp - CONSTCtoK;
}
/* if first time through, call EVTop immediately and save event results */
if(firstTime) {
converged = EVTop(ckt,
/* if first time through, call EVTop immediately and save event results */
if(firstTime) {
converged = EVTop(ckt,
(ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITJCT,
(ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITFLOAT,
ckt->CKTdcMaxIter,
MIF_TRUE);
EVTdump(ckt, IPC_ANAL_DCOP, g_mif_info.circuit.evt_step);
EVTop_save(ckt, MIF_FALSE, g_mif_info.circuit.evt_step);
if(converged != 0)
return(converged);
}
/* else, call NIiter first with mode = MODEINITPRED */
/* to attempt quick analog solution. Then call all hybrids and call */
/* EVTop only if event outputs have changed, or if non-converged */
else {
converged = NIiter(ckt,ckt->CKTdcTrcvMaxIter);
EVTcall_hybrids(ckt);
if((converged != 0) || (ckt->evt->queue.output.num_changed != 0)) {
converged = EVTop(ckt,
(ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITJCT,
(ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITFLOAT,
ckt->CKTdcMaxIter,
MIF_FALSE);
EVTdump(ckt, IPC_ANAL_DCTRCURVE, g_mif_info.circuit.evt_step);
EVTdump(ckt, IPC_ANAL_DCOP, g_mif_info.circuit.evt_step);
EVTop_save(ckt, MIF_FALSE, g_mif_info.circuit.evt_step);
if(converged != 0)
return(converged);
}
/* else, call NIiter first with mode = MODEINITPRED */
/* to attempt quick analog solution. Then call all hybrids and call */
/* EVTop only if event outputs have changed, or if non-converged */
else {
converged = NIiter(ckt,ckt->CKTdcTrcvMaxIter);
EVTcall_hybrids(ckt);
if((converged != 0) || (ckt->evt->queue.output.num_changed != 0)) {
converged = EVTop(ckt,
(ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITJCT,
(ckt->CKTmode & MODEUIC) | MODEDCTRANCURVE | MODEINITFLOAT,
ckt->CKTdcMaxIter,
MIF_FALSE);
EVTdump(ckt, IPC_ANAL_DCTRCURVE, g_mif_info.circuit.evt_step);
EVTop_save(ckt, MIF_FALSE, g_mif_info.circuit.evt_step);
if(converged != 0)
return(converged);
}
}
}
}
/* gtri - end - wbk - Do EVTop if event instances exist */
#endif
@ -394,9 +404,9 @@ resume:
->RESresist;
}
/* PN Temp sweep */
else
else
{
ckt->CKTtime = ckt->CKTtemp - CONSTCtoK ;
ckt->CKTtime = ckt->CKTtemp - CONSTCtoK ;
}
#ifdef XSPICE
@ -419,7 +429,7 @@ resume:
if(!ckt->CKTsenInfo) printf("sensitivity structure does not exist\n");
*/
if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode&DCSEN) ){
int senmode;
int senmode;
#ifdef SENSDEBUG
if(cv->TRCVvType[i]==vcode) { /* voltage source */
@ -430,15 +440,15 @@ resume:
printf("Current Source Value : %.5e A\n",
((ISRCinstance*)(cv->TRCVvElt[i]))->ISRCdcValue);
}
if(cv->TRCVvType[i]==rcode) { /* resistance */
if(cv->TRCVvType[i]==rcode) { /* resistance */
printf("Current Resistance Value : %.5e Ohm\n",
((RESinstance*)(cv->TRCVvElt[i]->GENmodPtr))->RESresist);
}
if(cv->TRCVvType[i]==TEMP_CODE) { /* Temperature */
if(cv->TRCVvType[i]==TEMP_CODE) { /* Temperature */
printf("Current Circuit Temperature : %.5e C\n",
ckt-CKTtemp - CONSTCtoK);
}
#endif /* SENSDEBUG */
senmode = ckt->CKTsenInfo->SENmode;
@ -474,35 +484,42 @@ resume:
}
nextstep:;
if(cv->TRCVvType[i]==vcode) { /* voltage source */
((VSRCinstance*)(cv->TRCVvElt[i]))->VSRCdcValue +=
cv->TRCVvStep[i];
} else if(cv->TRCVvType[i]==icode) { /* current source */
((ISRCinstance*)(cv->TRCVvElt[i]))->ISRCdcValue +=
cv->TRCVvStep[i];
} else if(cv->TRCVvType[i]==rcode) { /* resistance */
} else if(cv->TRCVvType[i]==rcode) { /* resistance */
((RESinstance*)(cv->TRCVvElt[i]))->RESresist +=
cv->TRCVvStep[i];
/* This code should update resistance and conductance */
((RESinstance*)(cv->TRCVvElt[i]))->RESconduct =
1/(((RESinstance*)(cv->TRCVvElt[i]))->RESresist);
/* This code should update resistance and conductance */
((RESinstance*)(cv->TRCVvElt[i]))->RESconduct =
1/(((RESinstance*)(cv->TRCVvElt[i]))->RESresist);
DEVices[rcode]->DEVload((GENmodel*)(cv->TRCVvElt[i]->GENmodPtr),ckt);
/*
* RESload((GENmodel*)(cv->TRCVvElt[i]->GENmodPtr),ckt);
*/
}
/* PN Temp Sweep - serban */
* RESload((GENmodel*)(cv->TRCVvElt[i]->GENmodPtr),ckt);
*/
}
/* PN Temp Sweep - serban */
else if (cv->TRCVvType[i]==TEMP_CODE)
{
ckt->CKTtemp += cv->TRCVvStep[i];
ckt->CKTtemp += cv->TRCVvStep[i];
CKTtemp(ckt);
} /* else not possible */
if( (*(SPfrontEnd->IFpauseTest))() ) {
if( (*(SPfrontEnd->IFpauseTest))() ) {
/* user asked us to pause, so save state */
cv->TRCVnestState = i;
return(E_PAUSE);
}
#ifdef HAS_WINDOWS
if (i == cv->TRCVnestLevel) {
actval += cv->TRCVvStep[cv->TRCVnestLevel];
SetAnalyse( "dc", (int)abs(((actval * 100.) / actdiff)));
}
#endif
}
/* all done, lets put everything back */
@ -519,21 +536,21 @@ nextstep:;
} else if(cv->TRCVvType[i] == rcode) /* Resistance */ {
((RESinstance*)(cv->TRCVvElt[i]))->RESresist =
cv->TRCVvSave[i];
/* We restore both resistance and conductance */
((RESinstance*)(cv->TRCVvElt[i]))->RESconduct =
1/(((RESinstance*)(cv->TRCVvElt[i]))->RESresist);
/* We restore both resistance and conductance */
((RESinstance*)(cv->TRCVvElt[i]))->RESconduct =
1/(((RESinstance*)(cv->TRCVvElt[i]))->RESresist);
((RESinstance*)(cv->TRCVvElt[i]))->RESresGiven = cv->TRCVgSave[i];
DEVices[rcode]->DEVload((GENmodel*)(cv->TRCVvElt[i]->GENmodPtr),ckt);
/*
* RESload((GENmodel*)(cv->TRCVvElt[i]->GENmodPtr),ckt);
*/
DEVices[rcode]->DEVload((GENmodel*)(cv->TRCVvElt[i]->GENmodPtr),ckt);
/*
* RESload((GENmodel*)(cv->TRCVvElt[i]->GENmodPtr),ckt);
*/
}
else if(cv->TRCVvType[i] == TEMP_CODE) {
else if(cv->TRCVvType[i] == TEMP_CODE) {
ckt->CKTtemp = cv->TRCVvSave[i];
CKTtemp(ckt);
} /* else not possible */
CKTtemp(ckt);
} /* else not possible */
}
(*(SPfrontEnd->OUTendPlot))(plot);

View File

@ -40,7 +40,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="&quot;$(ProjectDir)..\src\maths\poly&quot;;&quot;$(ProjectDir)..\src\frontend&quot;;&quot;$(ProjectDir)..\src\spicelib\devices&quot;;&quot;$(ProjectDir)..\src\include&quot;;&quot;$(ProjectDir)include&quot;"
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;SIMULATOR;OUTDECK"
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;SIMULATOR;OUTDECK;NGDEBUG"
MinimalRebuild="true"
ExceptionHandling="0"
BasicRuntimeChecks="0"
@ -1100,11 +1100,11 @@
>
</File>
<File
RelativePath="..\src\frontend\plotting\grid.h"
RelativePath="..\src\include\grid.h"
>
</File>
<File
RelativePath="..\src\include\grid.h"
RelativePath="..\src\frontend\plotting\grid.h"
>
</File>
<File