cleanup *par*.c und erlaube 0-time steps
This commit is contained in:
parent
4ff940081b
commit
41379c5aa4
|
|
@ -105,12 +105,13 @@ VSRCparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
|
||||||
copy_coeffs(here, value);
|
copy_coeffs(here, value);
|
||||||
|
|
||||||
for (i=0; i<(here->VSRCfunctionOrder/2)-1; i++) {
|
for (i=0; i<(here->VSRCfunctionOrder/2)-1; i++) {
|
||||||
/* fixme identical soll erlaubt werden */
|
if (here->VSRCcoeffs[2*i + 2] < here->VSRCcoeffs[2*i]) {
|
||||||
if (*(here->VSRCcoeffs+2*(i+1))<=*(here->VSRCcoeffs+2*i)) {
|
fprintf(stderr,
|
||||||
fprintf(stderr, "Warning : voltage source %s",
|
"Warning : voltage source %s"
|
||||||
here->VSRCname);
|
" has non-increasing PWL time points.\n",
|
||||||
fprintf(stderr, " has non-increasing PWL time points.\n");
|
here->VSRCname);
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -120,28 +121,30 @@ VSRCparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VSRC_R: {
|
case VSRC_R: {
|
||||||
double end_time;
|
double Tr = value->rValue;
|
||||||
here->VSRCr = value->rValue;
|
double Tperiod;
|
||||||
here->VSRCrGiven = TRUE;
|
|
||||||
|
|
||||||
for ( i = 0; i < here->VSRCfunctionOrder; i += 2 ) {
|
for ( i = 0; i < here->VSRCfunctionOrder; i += 2 )
|
||||||
here->VSRCrBreakpt = i;
|
if ( Tr == here->VSRCcoeffs[i] )
|
||||||
if ( here->VSRCr == *(here->VSRCcoeffs+i) ) break;
|
break;
|
||||||
|
|
||||||
|
if (i == here->VSRCfunctionOrder) {
|
||||||
|
fprintf(stderr, "ERROR: repeat start time value %g for pwl voltage source does not match any time point given!\n", Tr );
|
||||||
|
return ( E_PARMVAL );
|
||||||
}
|
}
|
||||||
|
|
||||||
end_time = *(here->VSRCcoeffs + here->VSRCfunctionOrder-2);
|
Tperiod =
|
||||||
/* actually ok, würde stationaer bedeuten ... und ist so gut wie no repeat */
|
here->VSRCcoeffs[here->VSRCfunctionOrder-2] - Tr;
|
||||||
if ( here->VSRCr > end_time ) {
|
|
||||||
fprintf(stderr, "ERROR: repeat start time value %g for pwl voltage source must be smaller than final time point given!\n", here->VSRCr );
|
if (Tperiod == 0.0) {
|
||||||
return ( E_PARMVAL );
|
fprintf(stderr, "ERROR: repeat start time value %g for pwl voltage source would cause a period of 0\n", Tr );
|
||||||
|
return ( E_PARMVAL );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( here->VSRCr != *(here->VSRCcoeffs+here->VSRCrBreakpt) ) {
|
here->VSRCrGiven = TRUE;
|
||||||
fprintf(stderr, "ERROR: repeat start time value %g for pwl voltage source does not match any time point given!\n", here->VSRCr );
|
here->VSRCr = Tr;
|
||||||
return ( E_PARMVAL );
|
here->VSRCrperiod = Tperiod;
|
||||||
}
|
here->VSRCrBreakpt = i;
|
||||||
|
|
||||||
here ->VSRCrperiod = end_time - here->VSRCcoeffs[here->VSRCrBreakpt];
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue