Browse Source

analysis/dctrcurv.c, bug fix, sweeping `temper' in a dc analysis

incorrect update of model parameters,
  need to `invoke CKTtemp()' *after* `inp_evaluate_temper()'

see tests/regression/temper/temper-2.cir
pre-master-46
rlar 11 years ago
parent
commit
5940bf9294
  1. 8
      src/spicelib/analysis/dctrcurv.c

8
src/spicelib/analysis/dctrcurv.c

@ -158,9 +158,9 @@ DCtrCurv(CKTcircuit *ckt, int restart)
job->TRCVvSave[i] = ckt->CKTtemp; /* Saves the old circuit temperature */
job->TRCVvType[i] = TEMP_CODE; /* Set the sweep type code */
ckt->CKTtemp = job->TRCVvStart[i] + CONSTCtoK; /* Set the new circuit temp */
CKTtemp(ckt);
if (expr_w_temper)
inp_evaluate_temper();
CKTtemp(ckt);
goto found;
}
@ -306,9 +306,9 @@ resume:
} else if (job->TRCVvType[i] == TEMP_CODE) {
ckt->CKTtemp = job->TRCVvStart[i] + CONSTCtoK;
CKTtemp(ckt);
if (expr_w_temper)
inp_evaluate_temper();
CKTtemp(ckt);
} else if (job->TRCVvType[i] == rcode) {
((RESinstance *)(job->TRCVvElt[i]))->RESresist =
@ -521,9 +521,9 @@ nextstep:;
else if (job->TRCVvType[i] == TEMP_CODE)
{
ckt->CKTtemp += job->TRCVvStep[i];
CKTtemp(ckt);
if (expr_w_temper)
inp_evaluate_temper();
CKTtemp(ckt);
} /* else not possible */
if(SPfrontEnd->IFpauseTest()) {
@ -566,9 +566,9 @@ nextstep:;
}
else if (job->TRCVvType[i] == TEMP_CODE) {
ckt->CKTtemp = job->TRCVvSave[i];
CKTtemp(ckt);
if (expr_w_temper)
inp_evaluate_temper();
CKTtemp(ckt);
} /* else not possible */
}
SPfrontEnd->OUTendPlot (plot);

Loading…
Cancel
Save