diff options
Diffstat (limited to 'cad/spice/files/patch-src_lib_ckt_dctrcurv_c')
-rw-r--r-- | cad/spice/files/patch-src_lib_ckt_dctrcurv_c | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/cad/spice/files/patch-src_lib_ckt_dctrcurv_c b/cad/spice/files/patch-src_lib_ckt_dctrcurv_c new file mode 100644 index 000000000000..4ca7bfebdb6a --- /dev/null +++ b/cad/spice/files/patch-src_lib_ckt_dctrcurv_c @@ -0,0 +1,135 @@ +--- src/lib/ckt/dctrcurv.c.orig Mon Apr 5 19:50:20 1993 ++++ src/lib/ckt/dctrcurv.c Thu Jul 17 02:52:24 2003 +@@ -15,6 +15,7 @@ + #endif + #include "cktdefs.h" + #include "util.h" ++#include "const.h" + #include "sperror.h" + #include "suffix.h" + +@@ -38,17 +39,6 @@ + int firstTime=1; + static GENERIC *plot; + +-#ifdef HAS_SENSE2 +-#ifdef SENSDEBUG +- if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode&DCSEN) ){ +- printf("\nDC Sensitivity Results\n\n"); +- CKTsenPrint(ckt); +- } +-#endif /* SENSDEBUG */ +-#endif +- +- +- + vcode = CKTtypelook("Vsource"); + icode = CKTtypelook("Isource"); + if(!restart && cv->TRCVnestState >= 0) { +@@ -106,15 +96,37 @@ + } + } + } ++#ifndef TEMP_CODE ++#define TEMP_CODE 1023 ++#endif ++ if(!strcmp(cv->TRCVvName[i], "temp")) ++ { ++ cv->TRCVvSave[i]=ckt->CKTtemp; ++ cv->TRCVvType[i]=TEMP_CODE; ++ ckt->CKTtemp = cv->TRCVvStart[i] + CONSTCtoK; ++ goto found; ++ } ++ + (*(SPfrontEnd->IFerror))(ERR_FATAL, + "DCtrCurv: source %s not in circuit", &(cv->TRCVvName[i])); + return(E_NODEV); + found:; + } ++ i--; + error = CKTnames(ckt,&numNames,&nameList); + if(error) return(error); +- (*(SPfrontEnd->IFnewUid))((GENERIC *)ckt,&varUid,(IFuid )NULL, +- "sweep", UID_OTHER, (GENERIC **)NULL); ++ if (cv->TRCVvType[i]==vcode) ++ (*(SPfrontEnd->IFnewUid))((GENERIC *)ckt,&varUid,(IFuid )NULL, ++ "v-sweep", UID_OTHER, (GENERIC **)NULL); ++ else if (cv->TRCVvType[i]==icode) ++ (*(SPfrontEnd->IFnewUid))((GENERIC *)ckt,&varUid,(IFuid )NULL, ++ "i-sweep", UID_OTHER, (GENERIC **)NULL); ++ else if (cv->TRCVvType[i]==TEMP_CODE) ++ (*(SPfrontEnd->IFnewUid))((GENERIC *)ckt,&varUid,(IFuid )NULL, ++ "temp-sweep", UID_OTHER, (GENERIC **)NULL); ++ else ++ (*(SPfrontEnd->IFnewUid))((GENERIC *)ckt,&varUid,(IFuid )NULL, ++ "?-sweep", UID_OTHER, (GENERIC **)NULL); + error = (*(SPfrontEnd->OUTpBeginPlot))((GENERIC *)ckt, + (GENERIC*)ckt->CKTcurJob, ckt->CKTcurJob->JOBname, + varUid,IF_REAL,numNames,nameList, IF_REAL,&plot); +@@ -150,6 +162,16 @@ + if (i > cv->TRCVnestLevel ) break ; + goto nextstep; + } ++ } else if(cv->TRCVvType[i]==TEMP_CODE) { ++ if(ckt->CKTtemp - CONSTCtoK > cv->TRCVvStop[i]) ++ { ++ 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); */ +@@ -160,6 +182,9 @@ + } 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 not possible */ + } + +@@ -188,7 +213,11 @@ + ckt->CKTtime = ((ISRCinstance *)(cv->TRCVvElt[i])) + ->ISRCdcValue ; + } +- ++ else ++ { ++ fprintf(stdout, "Shuldn't pass through here!\n"); ++ exit(1); ++ } + #ifdef HAS_SENSE2 + /* + if(!ckt->CKTsenInfo) printf("sensitivity structure does not exist\n"); +@@ -232,6 +261,12 @@ + } else if(cv->TRCVvType[i]==icode) { /* current source */ + ((ISRCinstance*)(cv->TRCVvElt[i]))->ISRCdcValue += + cv->TRCVvStep[i]; ++ } ++/* serban */ ++ else if (cv->TRCVvType[i]==TEMP_CODE) ++ { ++ ckt->CKTtemp += cv->TRCVvStep[i]; ++ CKTtemp(ckt); + } /* else not possible */ + if( (*(SPfrontEnd->IFpauseTest))() ) { + /* user asked us to pause, so save state */ +@@ -247,10 +282,12 @@ + ((VSRCinstance*)(cv->TRCVvElt[i]))->VSRCdcValue = + cv->TRCVvSave[i]; + ((VSRCinstance*)(cv->TRCVvElt[i]))->VSRCdcGiven = cv->TRCVgSave[i]; +- } else /* if(cv->TRCVvType[i] == icode) current source */ { ++ } else if(cv->TRCVvType[i] == icode) { + ((ISRCinstance*)(cv->TRCVvElt[i]))->ISRCdcValue = + cv->TRCVvSave[i]; + ((ISRCinstance*)(cv->TRCVvElt[i]))->ISRCdcGiven = cv->TRCVgSave[i]; ++ } else if(cv->TRCVvType[i] == TEMP_CODE) { ++ ckt->CKTtemp = cv->TRCVvSave[i]; + } /* else not possible */ + } + (*(SPfrontEnd->OUTendPlot))(plot); |