ports/cad/spice/files/patch-src_lib_ckt_dctrcurv_c
Maho Nakata 43801110c6 1. REAL cleaning on this port. The files dir is now organized so the
port can be maintained: previously there were multifile patches and several
patches for the same file, now it is a lot cleaner.

2. I also merged a memory leak fix and some fixes from
spice3f5-spaghetti.

4. MFB and removed GNUREADLINE support

5. honor CFLAGS and CC.

6. Add documentation.

7. Maho didn't change the name of port spice to spice3.
because spice4 might :) appear in the future. version number
should be listed on *only* PORTVERSION.

8. drom maintainership

PR:		54603
Submitted by:	"Pedro F. Giffuni" <giffunip@yahoo.com>
2003-07-19 03:13:48 +00:00

135 lines
4.7 KiB
Text

--- 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);