@@ -34,6 +34,21 @@ def __init__(
3434 else :
3535 self .k = 1.0
3636
37+ # special case for power series case 8
38+ if self .opcode == 8 :
39+ # need tables NTERMS and COEFFS
40+ if segment in ddgener ["NTERMS" ]:
41+ self .nterms = ddgener ["NTERMS" ][segment ]
42+ else :
43+ self .nterms = 2
44+ self .k1 = ddgener ["K1" ][segment ]
45+ self .k2 = ddgener ["K2" ][segment ]
46+ self .k3 = ddgener ["K3" ][segment ]
47+ self .k4 = ddgener ["K4" ][segment ]
48+ self .k5 = ddgener ["K5" ][segment ]
49+ self .k6 = ddgener ["K6" ][segment ]
50+ self .k7 = ddgener ["K7" ][segment ]
51+
3752 # special case for k as constant case 24
3853 if self .opcode == 24 :
3954 start , stop , steps = siminfo ["start" ], siminfo ["stop" ], siminfo ["steps" ]
@@ -136,9 +151,11 @@ def _opcode7(self) -> pd.Series:
136151 return np .log10 (self .ts_input_1 )
137152
138153 def _opcode8 (self ) -> pd .Series :
139- # Not presently implemented, read UCI would need to modify to
140- # process NTERMS and COEFFS sub blocks of GENER block
141- raise NotImplementedError ("GENER OPCODE 8 is not currently supported" )
154+ # K(1) + K(2) * A + K(3) * A ** 2
155+ # The user supplies the number of terms and the values of coefficients (K)
156+ return ((self .k1 + (self .k2 * self .ts_input_1 ) + (self .k3 * (self .ts_input_1 ** 2 ))
157+ + (self .k4 * (self .ts_input_1 ** 3 ))) + (self .k5 * (self .ts_input_1 ** 4 ))
158+ + (self .k6 * (self .ts_input_1 ** 7 )) + (self .k7 * (self .ts_input_1 ** 8 )))
142159
143160 def _opcode9 (self ) -> pd .Series :
144161 return np .power (self .k , self .ts_input_1 )
0 commit comments