diff --git a/ChangeLog b/ChangeLog index a8c437110..bf909c745 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,6 @@ 2010-03-20 Holger Vogt * com_compose.c: comment corrected - * subckt.c, cktdefs.h, acan.c, ifeval.c, inp2b.c, inpptree.c: + * subckt.c, cktdefs.h, acan.c, ifeval.c, inp2b.c, inpptree.c, cktinit.c: Variable HERTZ added to B source 2010-03-16 Holger Vogt diff --git a/src/include/cktdefs.h b/src/include/cktdefs.h index c1ffd55cc..9526e70e5 100644 --- a/src/include/cktdefs.h +++ b/src/include/cktdefs.h @@ -178,8 +178,6 @@ typedef struct { #define MODEINITTRAN 0x1000 #define MODEINITPRED 0x2000 -#define MODEINITHERTZ 0x4000 - /* old 'nosolv' paramater */ #define MODEUIC 0x10000l @@ -255,7 +253,7 @@ typedef struct { double CKTrelDv; /* rel limit for iter-iter voltage change */ int CKTtroubleNode; /* Non-convergent node number */ GENinstance *CKTtroubleElt; /* Non-convergent device instance */ - + int CKTvarHertz; /* variable HERTZ in B source */ /* gtri - evt - wbk - 5/20/91 - add event-driven and enhancements data */ #ifdef XSPICE Evt_Ckt_Data_t *evt; /* all data about event driven stuff */ diff --git a/src/spicelib/analysis/acan.c b/src/spicelib/analysis/acan.c index 0ec969096..0c25721ea 100644 --- a/src/spicelib/analysis/acan.c +++ b/src/spicelib/analysis/acan.c @@ -230,7 +230,7 @@ ACan(CKTcircuit *ckt, int restart) ckt->CKTomega = 2.0 * M_PI *freq; /* Update opertating point, if variable 'hertz' is given */ - if (ckt->CKTmode & MODEINITHERTZ) { + if (ckt->CKTvarHertz) { #ifdef XSPICE /* Call EVTop if event-driven instances exist */ @@ -256,10 +256,10 @@ ACan(CKTcircuit *ckt, int restart) CKTncDump(ckt); return(error); } + ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITSMSIG; + error = CKTload(ckt); + if(error) return(error); } - ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITSMSIG; - error = CKTload(ckt); - if(error) return(error); ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODEAC; error = NIacIter(ckt); @@ -352,7 +352,7 @@ ACan(CKTcircuit *ckt, int restart) freq *= ((ACAN*)ckt->CKTcurJob)->ACfreqDelta; if(((ACAN*)ckt->CKTcurJob)->ACfreqDelta==1) goto endsweep; - break; + break; case LINEAR: #ifdef HAS_WINDOWS diff --git a/src/spicelib/devices/cktinit.c b/src/spicelib/devices/cktinit.c index aca44f733..02504bc81 100644 --- a/src/spicelib/devices/cktinit.c +++ b/src/spicelib/devices/cktinit.c @@ -81,6 +81,7 @@ CKTinit(void **ckt) /* new circuit to create */ sckt->CKTnodeDamping = 0; sckt->CKTabsDv = 0.5; sckt->CKTrelDv = 2.0; + sckt->CKTvarHertz = 0; #ifdef XSPICE /* gtri - begin - wbk - allocate/initialize substructs */ diff --git a/src/spicelib/parser/inp2b.c b/src/spicelib/parser/inp2b.c index 7a6dffe98..d95a6bd41 100644 --- a/src/spicelib/parser/inp2b.c +++ b/src/spicelib/parser/inp2b.c @@ -41,7 +41,7 @@ void INP2B(void *ckt, INPtables * tab, card * current) /* if we find 'hertz' variable, set flag to actual circuit */ if(strstr(current->line, "hertz")) - inckt->CKTmode = MODEINITHERTZ; + inckt->CKTvarHertz = 1; line = current->line; INPgetTok(&line, &name, 1);