versuch repeat zu realisieren

fixme, step antworten ?!?
This commit is contained in:
rlar 2012-12-17 20:58:22 +01:00
parent 53a0963632
commit 53ae036b6d
1 changed files with 19 additions and 3 deletions

View File

@ -22,6 +22,15 @@ Modified: 2000 AlansFixes
static double
pwl_state_get(struct pwl_state *this, double time)
{
/* fixme, enter mehrmals im sägezahn ...
* 1) optimier dafür
* 2) stelle sicher, dass das jeweils höchste timestamp zum zug kommt
* (allow step antwort *)
* invariant bei repeat:
* enter time < timof(last-point)
* this->position < indexof(last-point) (fixme really ? wenn es nur 2 points sind zB )
*/
for (;;) {
double t1 = this->arr[this->position + 0];
@ -341,6 +350,10 @@ VSRCload(GENmodel *inModel, CKTcircuit *ckt)
struct pwl_state *state;
double td = here->VSRCrdelay;
double tp = here->VSRCrperiod;
double r = here->VSRCr;
if (!here->VSRC_state) {
here->VSRC_state = TMALLOC(struct pwl_state, 1);
pwl_state_init((struct pwl_state *) here->VSRC_state, here);
@ -349,9 +362,12 @@ VSRCload(GENmodel *inModel, CKTcircuit *ckt)
state = (struct pwl_state *) here -> VSRC_state;
/* fixme repeat value ignored */
value = pwl_state_get(state, time - here->VSRCrdelay);
goto loadDone;
if (here->VSRCrGiven && time - td - r >= 0) {
double t = fmod(time - td - r, tp) + r;
value = pwl_state_get(state, t);
} else {
value = pwl_state_get(state, time - td);
}
}
break;