34 ckt->CKTsizeIncr = 10;
35 ckt->CKTtimeIndex = 0;
36 ckt->CKTtimeListSize = ckt->CKTfinalTime/ckt->CKTmaxStep + 0.5;
37 FREE(ckt->CKTtimePoints);
39 (
double *)
MALLOC(
sizeof(
double)*ckt->CKTtimeListSize);
43 if (ckt->CKTtimeIndex >= ckt->CKTtimeListSize) {
46 ckt->CKTsizeIncr = 5 + ckt->CKTtimeIndex*
47 (ckt->CKTfinalTime - ckt->CKTtime)/ckt->CKTtime;
49 ckt->CKTtimeListSize += ckt->CKTsizeIncr;
50 ckt->CKTtimePoints = (
double *)
REALLOC((
char *)
51 ckt->CKTtimePoints,
sizeof(
double)*ckt->CKTtimeListSize);
53 *(ckt->CKTtimePoints + ckt->CKTtimeIndex) = ckt->CKTtime;
120 *(here->
LTRAv1 + ckt->CKTtimeIndex) =
123 *(here->
LTRAv2 + ckt->CKTtimeIndex) =
126 *(here->
LTRAi1 + ckt->CKTtimeIndex) =
128 *(here->
LTRAi2 + ckt->CKTtimeIndex) =
131 if (ckt->CKTtryToCompact && (ckt->CKTtimeIndex >= 2)) {
138 t1 = *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 2);
139 t2 = *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1);
140 t3 = *(ckt->CKTtimePoints + ckt->CKTtimeIndex);
144 t1,*(here->
LTRAv1 + ckt->CKTtimeIndex - 2),
145 t2,*(here->
LTRAv1 + ckt->CKTtimeIndex - 1),
146 t3,*(here->
LTRAv1 + ckt->CKTtimeIndex),
151 t1,*(here->
LTRAv2 + ckt->CKTtimeIndex - 2),
152 t2,*(here->
LTRAv2 + ckt->CKTtimeIndex - 1),
153 t3,*(here->
LTRAv2 + ckt->CKTtimeIndex),
158 t1,*(here->
LTRAi1 + ckt->CKTtimeIndex - 2),
159 t2,*(here->
LTRAi1 + ckt->CKTtimeIndex - 1),
160 t3,*(here->
LTRAi1 + ckt->CKTtimeIndex),
165 t1,*(here->
LTRAi2 + ckt->CKTtimeIndex - 2),
166 t2,*(here->
LTRAi2 + ckt->CKTtimeIndex - 1),
167 t3,*(here->
LTRAi2 + ckt->CKTtimeIndex),
188 if (ckt->CKTtryToCompact && compact && (ckt->CKTtimeIndex >= 2)) {
199 *(here->
LTRAv1 + ckt->CKTtimeIndex - 1) =
200 *(here->
LTRAv1 + ckt->CKTtimeIndex);
201 *(here->
LTRAv2 + ckt->CKTtimeIndex - 1) =
202 *(here->
LTRAv2 + ckt->CKTtimeIndex);
203 *(here->
LTRAi1 + ckt->CKTtimeIndex - 1) =
204 *(here->
LTRAi1 + ckt->CKTtimeIndex);
205 *(here->
LTRAi2 + ckt->CKTtimeIndex - 1) =
206 *(here->
LTRAi2 + ckt->CKTtimeIndex);
210 *(ckt->CKTtimePoints + ckt->CKTtimeIndex - 1) =
211 *(ckt->CKTtimePoints + ckt->CKTtimeIndex);
215 fprintf(stdout,
"compacted at time=%g\n",
216 *(ckt->CKTtimePoints+ckt->CKTtimeIndex));
224 #define CHECK(a,b,c) (MAX(MAX(a,b),c)-MIN(MIN(a,b),c) >= \ 225 FABS(50.0*(.33*ckt->CKTreltol*(a+b+c) + ckt->CKTabstol))) 234 double v1, v2, v3, d1, d2;
237 v1 = *(ckt->CKTstate0 + here->LTRAv1Tot);
238 v2 = *(ckt->CKTstate1 + here->LTRAv1Tot);
239 v3 = ckt->CKTtimeIndex <= 1 ? v2 :
240 *(ckt->CKTstate2 + here->LTRAv1Tot);
241 d1 = (v1-v2)/ckt->CKTdelta;
242 d2 = (v2-v3)/ckt->CKTdeltaOld[1];
248 &&
CHECK(v1,v2,v3)) {
250 *(ckt->CKTtimePoints + ckt->CKTtimeIndex-1) + model->
LTRAtd);
254 v1 = *(ckt->CKTstate0 + here->LTRAv2Tot);
255 v2 = *(ckt->CKTstate1 + here->LTRAv2Tot);
256 v3 = ckt->CKTtimeIndex <= 1 ? v2 :
257 *(ckt->CKTstate2 + here->LTRAv2Tot);
258 d1 = (v1-v2)/ckt->CKTdelta;
259 d2 = (v2-v3)/ckt->CKTdeltaOld[1];
265 &&
CHECK(v1,v2,v3)) {
267 *(ckt->CKTtimePoints + ckt->CKTtimeIndex-1) + model->
LTRAtd);
struct sLTRAinstance * LTRAnextInstance
int LTRAaccept(CKTcircuit *ckt, GENmodel *inModel)
LTRAinstance * LTRAinstances
double * LTRAh3dashCoeffs
#define REALLOC(ptr, type, number)
int LTRAstraightLineCheck()
struct sLTRAmodel * LTRAnextModel
double * LTRAh1dashCoeffs