Browse Source

Fix Bug #467 - ".OPTION INTERP has accuracy issue".

pre-master-46
Giles Atkinson 2 years ago
parent
commit
359e3d4609
  1. 4
      src/frontend/outitf.c

4
src/frontend/outitf.c

@ -1542,6 +1542,7 @@ InterpFileAdd(runDesc *run, IFvalue *refValue, IFvalue *valuePtr)
newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i]; newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i];
fileAddRealValue(run->fp, run->binary, newval); fileAddRealValue(run->fp, run->binary, newval);
valueold[i] = valuenew[i]; valueold[i] = valuenew[i];
timeold = refValue->rValue;
} }
else if (nodata) else if (nodata)
/* Just keep the transient output value corresponding to timeold, /* Just keep the transient output value corresponding to timeold,
@ -1573,6 +1574,7 @@ InterpFileAdd(runDesc *run, IFvalue *refValue, IFvalue *valuePtr)
newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i]; newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i];
fileAddRealValue(run->fp, run->binary, newval); fileAddRealValue(run->fp, run->binary, newval);
valueold[i] = valuenew[i]; valueold[i] = valuenew[i];
timeold = refValue->rValue;
} }
else if (nodata) else if (nodata)
/* Just keep the transient output value corresponding to timeold, /* Just keep the transient output value corresponding to timeold,
@ -1705,6 +1707,7 @@ InterpPlotAdd(runDesc *run, IFvalue *refValue, IFvalue *valuePtr)
newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i]; newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i];
plotAddRealValue(&run->data[i], newval); plotAddRealValue(&run->data[i], newval);
valueold[i] = valuenew[i]; valueold[i] = valuenew[i];
timeold = refValue->rValue;
} }
else if (nodata) else if (nodata)
/* Just keep the transient output value corresponding to timeold, /* Just keep the transient output value corresponding to timeold,
@ -1727,6 +1730,7 @@ InterpPlotAdd(runDesc *run, IFvalue *refValue, IFvalue *valuePtr)
newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i]; newval = (timestep - run->circuit->CKTstep - timeold)/(timenew - timeold) * (valuenew[i] - valueold[i]) + valueold[i];
plotAddRealValue(&run->data[i], newval); plotAddRealValue(&run->data[i], newval);
valueold[i] = valuenew[i]; valueold[i] = valuenew[i];
timeold = refValue->rValue;
} }
else if (nodata) else if (nodata)
/* Just keep the transient output value corresponding to timeold, /* Just keep the transient output value corresponding to timeold,

Loading…
Cancel
Save