Browse Source

clarify start time generation

clarify time and amplitude updates
don't read comment lines
pre-master-46
Holger Vogt 8 years ago
parent
commit
908339359a
  1. 21
      src/xspice/icm/analog/file_source/cfunc.mod

21
src/xspice/icm/analog/file_source/cfunc.mod

@ -207,9 +207,6 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc.
loc->indata->actpointer = 0; loc->indata->actpointer = 0;
loc->indata->size = stepsize; loc->indata->size = stepsize;
loc->timeinterval[0] = loc->timeinterval[1] = PARAM_NULL(timeoffset) ? 0.0 : PARAM(timeoffset);
for (i = 0; i < size; ++i)
loc->amplinterval[2 * i] = loc->amplinterval[2 * i + 1] = PARAM_NULL(amploffset) ? 0.0 : PARAM(amploffset[i]);
/* open the file */ /* open the file */
loc->state->fp = fopen_with_path(PARAM(file), "r"); loc->state->fp = fopen_with_path(PARAM(file), "r");
loc->state->atend = 0; loc->state->atend = 0;
@ -246,7 +243,7 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc.
/* read the time channel; update the time difference */ /* read the time channel; update the time difference */
while (*cp && isspace_c(*cp)) while (*cp && isspace_c(*cp))
++cp; ++cp;
if (*cp == '#' || *cp == ';') {
if (*cp == '*' || *cp == '#' || *cp == ';') {
free(cpdel); free(cpdel);
continue; continue;
} }
@ -299,8 +296,9 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc.
fclose(loc->state->fp); fclose(loc->state->fp);
loc->state->fp = NULL; loc->state->fp = NULL;
} }
/* point to the next time */
loc->indata->actpointer = stepsize;
/* set the start time data */
loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer];
loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize];
} }
loc = STATIC_VAR (locdata); loc = STATIC_VAR (locdata);
@ -309,13 +307,12 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc.
* If TIME steps backward, for example due to a second invocation of a 'tran' analysis * If TIME steps backward, for example due to a second invocation of a 'tran' analysis
* step back in datavec[loc->indata->actpointer] . * step back in datavec[loc->indata->actpointer] .
*/ */
if (TIME < loc->timeinterval[0]) { if (TIME < loc->timeinterval[0]) {
while (TIME < loc->indata->datavec[loc->indata->actpointer] && loc->indata->actpointer >= 0) while (TIME < loc->indata->datavec[loc->indata->actpointer] && loc->indata->actpointer >= 0)
loc->indata->actpointer -= stepsize; loc->indata->actpointer -= stepsize;
loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer]; loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer];
loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize];
} }
loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize];
while (TIME > loc->timeinterval[1]) { while (TIME > loc->timeinterval[1]) {
loc->indata->actpointer += stepsize; loc->indata->actpointer += stepsize;
@ -323,13 +320,13 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc.
/* we are done */ /* we are done */
return; return;
} }
loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer];
loc->timeinterval[1] = loc->indata->datavec[loc->indata->actpointer + stepsize];
loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer];
} }
loc->timeinterval[0] = loc->indata->datavec[loc->indata->actpointer - stepsize];
for (j = 0; j < size; j++) { for (j = 0; j < size; j++) {
loc->amplinterval[2 * j] = loc->indata->datavec[loc->indata->actpointer - stepsize + j + 1];
loc->amplinterval[2 * j + 1] = loc->indata->datavec[loc->indata->actpointer + j + 1];
loc->amplinterval[2 * j] = loc->indata->datavec[loc->indata->actpointer + j + 1];
loc->amplinterval[2 * j + 1] = loc->indata->datavec[loc->indata->actpointer + stepsize + j + 1];
} }
if (loc->timeinterval[0] <= TIME && TIME <= loc->timeinterval[1]) { if (loc->timeinterval[0] <= TIME && TIME <= loc->timeinterval[1]) {

Loading…
Cancel
Save