@@ -60,14 +60,7 @@ def set_oper_params(self):
6060 self .set_initpos ()
6161
6262 def set_solution_expressions (self ):
63- self .solution_expressions = [
64- "Moving1.Position" ,
65- "Moving1.Torque" ,
66- * [f"FluxLinkage(Phase{ p } )" for p in "ABCDE" ],
67- * [f"InducedVoltage(Phase{ p } )" for p in "ABCDE" ],
68- * [f"InputCurrent(Phase{ p } )" for p in "ABCDE" ],
69- * [f"L(Phase{ x } ,Phase{ y } )" for x in "ABCDE" for y in "ABCDE" ],
70- ]
63+ self .solution_expressions = self .compute_solution_expressions ()
7164
7265 def set_output_vars (self ):
7366 self .output_vars = {}
@@ -231,9 +224,8 @@ def extract_results(self, solutions):
231224 torque = self .extract_expression (solutions , "Moving1.Torque" )
232225
233226 theta_el = electrical_angle (position , np .deg2rad (self .InitPos ), self .geometry .PolePairs , self .RotSign , degrees = False )
234- flux_phases = np .stack ([self .extract_expression (solutions , f"FluxLinkage(Phase{ p } )" ) for p in "ABCDE" ], axis = - 1 )
235- vind_phases = np .stack ([self .extract_expression (solutions , f"InducedVoltage(Phase{ p } )" ) for p in "ABCDE" ], axis = - 1 )
236- current_phases = np .stack ([self .extract_expression (solutions , f"InputCurrent(Phase{ p } )" ) for p in "ABCDE" ], axis = - 1 )
227+
228+ flux_phases , vind_phases , current_phases , L_raw = self .extract_phase_results (solutions )
237229
238230 Flux_d1 , Flux_q1 = to_dq (flux_phases , theta_el , harmonic = 1 )
239231 Flux_d3 , Flux_q3 = to_dq (flux_phases , theta_el , harmonic = 3 )
@@ -248,25 +240,23 @@ def extract_results(self, solutions):
248240 epsI3 = np .atan2 (self .Iq3 , self .Id3 )
249241
250242 time = np .array (solutions .primary_sweep_values )
251- dI_dt_phases = np .zeros ((len (time ), 5 ))
252- for k in range (5 ):
253- phase_offset = - 2 * np .pi * k / 5 # 5 angles, 0deg, -72deg, -144deg, -216deg, -288deg
243+ dI_dt_phases = np .zeros ((len (time ), self . geometry . n_phases ))
244+ for k in range (self . geometry . n_phases ):
245+ phase_offset = - 2 * np .pi * k / self . geometry . n_phases
254246 dI_dt_phases [:, k ] = - Im1 * self .w * np .sin (self .w * time + phase_offset + epsI1 - np .pi ) - Im3 * 3 * self .w * np .sin (3 * (self .w * time + phase_offset ) + epsI3 - np .pi )
255247
256248 V_phases = vind_phases + self .Rstat * current_phases + self .Lew * dI_dt_phases
257249
258250 V_d1 , V_q1 = to_dq (V_phases , theta_el , harmonic = 1 )
259251 V_d3 , V_q3 = to_dq (V_phases , theta_el , harmonic = 3 )
260252
261- L_raw = [np .stack ([self .extract_expression (solutions , f"L(Phase{ x } ,Phase{ y } )" ) for y in "ABCDE" ], axis = - 1 ) for x in "ABCDE" ]
262-
263- L_d1_row = np .zeros ((len (time ), 5 ))
264- L_q1_row = np .zeros ((len (time ), 5 ))
265- L_d3_row = np .zeros ((len (time ), 5 ))
266- L_q3_row = np .zeros ((len (time ), 5 ))
253+ L_d1_row = np .zeros ((len (time ), self .geometry .n_phases ))
254+ L_q1_row = np .zeros ((len (time ), self .geometry .n_phases ))
255+ L_d3_row = np .zeros ((len (time ), self .geometry .n_phases ))
256+ L_q3_row = np .zeros ((len (time ), self .geometry .n_phases ))
267257 for i , L_row in enumerate (L_raw ):
268- L_d1_row [:, i ], L_q1_row [:, i ] = (v * 5 / 2 for v in to_dq (L_row , theta_el , harmonic = 1 ))
269- L_d3_row [:, i ], L_q3_row [:, i ] = (v * 5 / 2 for v in to_dq (L_row , theta_el , harmonic = 3 ))
258+ L_d1_row [:, i ], L_q1_row [:, i ] = (v * self . geometry . n_phases / 2 for v in to_dq (L_row , theta_el , harmonic = 1 ))
259+ L_d3_row [:, i ], L_q3_row [:, i ] = (v * self . geometry . n_phases / 2 for v in to_dq (L_row , theta_el , harmonic = 3 ))
270260
271261 Ld1 , Ld1q1 = to_dq (L_d1_row , theta_el , harmonic = 1 )
272262 Lq1d1 , Lq1 = to_dq (L_q1_row , theta_el , harmonic = 1 )
@@ -282,7 +272,7 @@ def extract_results(self, solutions):
282272 Flux_e_d3 = Flux_d3 - (Ld3d1 * I_d1 + Ld3q1 * I_q1 + Ld3 * I_d3 + Ld3q3 * I_q3 )
283273 Flux_e_q3 = Flux_q3 - (Lq3d1 * I_d1 + Lq3q1 * I_q1 + Lq3d3 * I_d3 + Lq3 * I_q3 )
284274
285- # Torque_dq = 5 / 2 * self.geometry.PolePairs * ((Flux_d1 * I_q1 - Flux_q1 * I_d1) + 3 * (Flux_d3 * I_q3 - Flux_q3 * I_d3))
275+ # Torque_dq = self.geometry.n_phases / 2 * self.geometry.PolePairs * ((Flux_d1 * I_q1 - Flux_q1 * I_d1) + 3 * (Flux_d3 * I_q3 - Flux_q3 * I_d3))
286276
287277 out = {
288278 "V_d1" : V_d1 ,
0 commit comments