From 6d14cb0039121675cc5b88ee2bddf456d63a2a67 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 09:18:13 +0200 Subject: [PATCH 01/12] use groups to create coils --- motors/synrm_3f_36s.py | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/motors/synrm_3f_36s.py b/motors/synrm_3f_36s.py index 2d68dac..f3b76f9 100644 --- a/motors/synrm_3f_36s.py +++ b/motors/synrm_3f_36s.py @@ -213,30 +213,22 @@ def assign_stator_coils(self, m2d: Maxwell2d) -> None: I_B = "Im * cos(w*Time-120deg+epsI)" I_C = "Im * cos(w*Time-240deg+epsI)" - phases_polarity = ["Positive", "Negative", "Positive"] - phases_name = ["A", "C", "B"] - phases_current = [I_A, I_C, I_B] - i_coil = 0 - for phase_polarity, phase_name, phase_current in zip(phases_polarity, phases_name, phases_current): - names = [] - for _ in range(3): - m2d.assign_coil( - assignment=[self.geometry.id_coils[i_coil]], - conductors_number="Nc", - polarity=phase_polarity, - name=f"CS{i_coil + 1}", - ) - names.append(f"CS{i_coil + 1}") - i_coil += 1 + groups = self.compute_phase_groups() + + for group in groups: + for coil_name, polarity in group: + m2d.assign_coil(assignment=[coil_name], conductors_number="Nc", polarity=polarity, name=f"CS_{coil_name}") + + for phase_name, current, group in zip("ABC", [I_A, I_B, I_C], groups): m2d.assign_winding( assignment=None, winding_type="Current", is_solid=False, - current=phase_current, + current=current, parallel_branches="ParallelPaths", name=f"Phase{phase_name}", ) - m2d.add_winding_coils(assignment=f"Phase{phase_name}", coils=names) + m2d.add_winding_coils(assignment=f"Phase{phase_name}", coils=[f"CS_{coil_name}" for coil_name, _ in group]) def inductance_computation(self, m2d: Maxwell2d) -> None: m2d.change_inductance_computation(compute_transient_inductance=True, incremental_matrix=False) From 33040fb4a9624a1b5c252cb856172965d763ebac Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 09:28:12 +0200 Subject: [PATCH 02/12] ruff --- motors/synrm_3f_36s.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/motors/synrm_3f_36s.py b/motors/synrm_3f_36s.py index f3b76f9..8125cdc 100644 --- a/motors/synrm_3f_36s.py +++ b/motors/synrm_3f_36s.py @@ -214,7 +214,7 @@ def assign_stator_coils(self, m2d: Maxwell2d) -> None: I_C = "Im * cos(w*Time-240deg+epsI)" groups = self.compute_phase_groups() - + for group in groups: for coil_name, polarity in group: m2d.assign_coil(assignment=[coil_name], conductors_number="Nc", polarity=polarity, name=f"CS_{coil_name}") From e85803b9f8f019184a3730c3c6f1829fb16016b7 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 09:37:30 +0200 Subject: [PATCH 03/12] use groups() instead of hardcoding --- motors/synrm_5f_40s.py | 126 ++++++----------------------------------- 1 file changed, 17 insertions(+), 109 deletions(-) diff --git a/motors/synrm_5f_40s.py b/motors/synrm_5f_40s.py index 4d38e62..d807f85 100644 --- a/motors/synrm_5f_40s.py +++ b/motors/synrm_5f_40s.py @@ -98,115 +98,23 @@ def assign_stator_coils(self, m2d: Maxwell2d) -> None: I_C = "Im1*cos(w*Time-144deg+epsI1-pi) + Im3*cos(3*(w*Time-144deg)+epsI3-pi)" I_D = "Im1*cos(w*Time-216deg+epsI1-pi) + Im3*cos(3*(w*Time-216deg)+epsI3-pi)" I_E = "Im1*cos(w*Time-288deg+epsI1-pi) + Im3*cos(3*(w*Time-288deg)+epsI3-pi)" - m2d.assign_coil - # Define phase windings - m2d.assign_coil( - assignment=["Coil"], - conductors_number="Nc", - polarity="Positive", - name="CS1", - ) - m2d.assign_coil( - assignment=["Coil_1"], - conductors_number="Nc", - polarity="Negative", - name="CS2", - ) - m2d.assign_coil( - assignment=["Coil_2"], - conductors_number="Nc", - polarity="Negative", - name="CS3", - ) - m2d.assign_coil( - assignment=["Coil_3"], - conductors_number="Nc", - polarity="Positive", - name="CS4", - ) - m2d.assign_coil( - assignment=["Coil_4"], - conductors_number="Nc", - polarity="Positive", - name="CS5", - ) - m2d.assign_coil( - assignment=["Coil_5"], - conductors_number="Nc", - polarity="Negative", - name="CS6", - ) - m2d.assign_coil( - assignment=["Coil_6"], - conductors_number="Nc", - polarity="Negative", - name="CS7", - ) - m2d.assign_coil( - assignment=["Coil_7"], - conductors_number="Nc", - polarity="Positive", - name="CS8", - ) - m2d.assign_coil( - assignment=["Coil_8"], - conductors_number="Nc", - polarity="Positive", - name="CS9", - ) - m2d.assign_coil( - assignment=["Coil_9"], - conductors_number="Nc", - polarity="Negative", - name="CS10", - ) - - m2d.assign_winding( - assignment=None, - winding_type="Current", - is_solid=False, - current=I_A, - parallel_branches="ParallelPaths", - name="PhaseA", - ) - m2d.assign_winding( - assignment=None, - winding_type="Current", - is_solid=False, - current=I_B, - parallel_branches="ParallelPaths", - name="PhaseB", - ) - m2d.assign_winding( - assignment=None, - winding_type="Current", - is_solid=False, - current=I_C, - parallel_branches="ParallelPaths", - name="PhaseC", - ) - m2d.assign_winding( - assignment=None, - winding_type="Current", - is_solid=False, - current=I_D, - parallel_branches="ParallelPaths", - name="PhaseD", - ) - m2d.assign_winding( - assignment=None, - winding_type="Current", - is_solid=False, - current=I_E, - parallel_branches="ParallelPaths", - name="PhaseE", - ) - - m2d.add_winding_coils(assignment="PhaseA", coils=["CS1", "CS10"]) - m2d.add_winding_coils(assignment="PhaseB", coils=["CS4", "CS5"]) - m2d.add_winding_coils(assignment="PhaseC", coils=["CS8", "CS9"]) - m2d.add_winding_coils(assignment="PhaseD", coils=["CS2", "CS3"]) - m2d.add_winding_coils(assignment="PhaseE", coils=["CS6", "CS7"]) + + groups = self.compute_phase_groups() + + for group in groups: + for coil_name, polarity in group: + m2d.assign_coil(assignment=[coil_name], conductors_number="Nc", polarity=polarity, name=f"CS_{coil_name}") + + for phase_name, current, group in zip("ABCDE", [I_A, I_B, I_C, I_D, I_E], groups): + m2d.assign_winding( + assignment=None, + winding_type="Current", + is_solid=False, + current=current, + parallel_branches="ParallelPaths", + name=f"Phase{phase_name}", + ) + m2d.add_winding_coils(assignment=f"Phase{phase_name}", coils=[f"CS_{coil_name}" for coil_name, _ in group]) def inductance_computation(self, m2d: Maxwell2d) -> None: m2d.change_inductance_computation(compute_transient_inductance=True, incremental_matrix=True) From f02bc5d6444e843b29072ab9827bd71a703b94a3 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 09:47:44 +0200 Subject: [PATCH 04/12] inherit from 36s and 40s respectively --- motors/synrm_3f_60s.py | 23 ----------------------- motors/synrm_5f_60s.py | 25 ------------------------- 2 files changed, 48 deletions(-) diff --git a/motors/synrm_3f_60s.py b/motors/synrm_3f_60s.py index 73fa517..613336b 100644 --- a/motors/synrm_3f_60s.py +++ b/motors/synrm_3f_60s.py @@ -28,28 +28,5 @@ class Computation(BaseComputation): def set_solution_expressions(self): self.solution_expressions = ["Moving1.Torque"] - def assign_stator_coils(self, m2d: Maxwell2d) -> None: - # Excitations - I_A = "Im * cos(w*Time+epsI)" - I_B = "Im * cos(w*Time-120deg+epsI)" - I_C = "Im * cos(w*Time-240deg+epsI)" - - groups = self.compute_phase_groups() - - for group in groups: - for coil_name, polarity in group: - m2d.assign_coil(assignment=[coil_name], conductors_number="Nc", polarity=polarity, name=f"CS_{coil_name}") - - for phase_name, current, group in zip("ABC", [I_A, I_B, I_C], groups): - m2d.assign_winding( - assignment=None, - winding_type="Current", - is_solid=False, - current=current, - parallel_branches="ParallelPaths", - name=f"Phase{phase_name}", - ) - m2d.add_winding_coils(assignment=f"Phase{phase_name}", coils=[f"CS_{coil_name}" for coil_name, _ in group]) - def extract_results(self, solutions): return {"Moving1.Torque": self.extract_expression(solutions, "Moving1.Torque")} diff --git a/motors/synrm_5f_60s.py b/motors/synrm_5f_60s.py index c75a67e..27b75e2 100644 --- a/motors/synrm_5f_60s.py +++ b/motors/synrm_5f_60s.py @@ -32,30 +32,5 @@ class Computation(BaseComputation): def set_solution_expressions(self): self.solution_expressions = ["Moving1.Torque"] - def assign_stator_coils(self, m2d: Maxwell2d) -> None: - # Excitations - I_A = "Im1*cos(w*Time+epsI1-pi) + Im3*cos(3*(w*Time)+epsI3-pi)" - I_B = "Im1*cos(w*Time-72deg+epsI1-pi) + Im3*cos(3*(w*Time-72deg)+epsI3-pi)" - I_C = "Im1*cos(w*Time-144deg+epsI1-pi) + Im3*cos(3*(w*Time-144deg)+epsI3-pi)" - I_D = "Im1*cos(w*Time-216deg+epsI1-pi) + Im3*cos(3*(w*Time-216deg)+epsI3-pi)" - I_E = "Im1*cos(w*Time-288deg+epsI1-pi) + Im3*cos(3*(w*Time-288deg)+epsI3-pi)" - - groups = self.compute_phase_groups() - - for group in groups: - for coil_name, polarity in group: - m2d.assign_coil(assignment=[coil_name], conductors_number="Nc", polarity=polarity, name=f"CS_{coil_name}") - - for phase_name, current, group in zip("ABCDE", [I_A, I_B, I_C, I_D, I_E], groups): - m2d.assign_winding( - assignment=None, - winding_type="Current", - is_solid=False, - current=current, - parallel_branches="ParallelPaths", - name=f"Phase{phase_name}", - ) - m2d.add_winding_coils(assignment=f"Phase{phase_name}", coils=[f"CS_{coil_name}" for coil_name, _ in group]) - def extract_results(self, solutions): return {"Moving1.Torque": self.extract_expression(solutions, "Moving1.Torque")} From f7ead3758be07793b28cd75bbe7edc90bff51089 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 09:50:52 +0200 Subject: [PATCH 05/12] ruff --- motors/synrm_3f_60s.py | 2 -- motors/synrm_5f_60s.py | 2 -- 2 files changed, 4 deletions(-) diff --git a/motors/synrm_3f_60s.py b/motors/synrm_3f_60s.py index 613336b..97333a1 100644 --- a/motors/synrm_3f_60s.py +++ b/motors/synrm_3f_60s.py @@ -1,7 +1,5 @@ """Anchor `synrm_3f_60s`: 3-phase synchronous reluctance machine, 60 stator slots.""" -from ansys.aedt.core import Maxwell2d - from .synrm_3f_36s import Computation as BaseComputation from .synrm_3f_36s import Geometry as BaseGeometry diff --git a/motors/synrm_5f_60s.py b/motors/synrm_5f_60s.py index 27b75e2..76b6961 100644 --- a/motors/synrm_5f_60s.py +++ b/motors/synrm_5f_60s.py @@ -4,8 +4,6 @@ phases. Excitation is dq1 + dq3. """ -from ansys.aedt.core import Maxwell2d - from .synrm_5f_40s import Computation as BaseComputation from .synrm_5f_40s import Geometry as BaseGeometry From 8ff7cec016394c041932e4c709602db5ba1ebc83 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 10:25:35 +0200 Subject: [PATCH 06/12] use loops to define phase_currents --- motors/synrm_3f_36s.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/motors/synrm_3f_36s.py b/motors/synrm_3f_36s.py index 8125cdc..0d689a2 100644 --- a/motors/synrm_3f_36s.py +++ b/motors/synrm_3f_36s.py @@ -209,9 +209,8 @@ def set_post_params(self): def assign_stator_coils(self, m2d: Maxwell2d) -> None: # Excitations - I_A = "Im * cos(w*Time+epsI)" - I_B = "Im * cos(w*Time-120deg+epsI)" - I_C = "Im * cos(w*Time-240deg+epsI)" + + phase_currents = [f"Im * cos(w*Time-{360 * k / self.geometry.n_phases}deg+epsI)" for k in range(self.geometry.n_phases)] groups = self.compute_phase_groups() @@ -219,7 +218,7 @@ def assign_stator_coils(self, m2d: Maxwell2d) -> None: for coil_name, polarity in group: m2d.assign_coil(assignment=[coil_name], conductors_number="Nc", polarity=polarity, name=f"CS_{coil_name}") - for phase_name, current, group in zip("ABC", [I_A, I_B, I_C], groups): + for phase_name, current, group in zip("ABC", phase_currents, groups): m2d.assign_winding( assignment=None, winding_type="Current", From 41e316ca61f0a6bcd918a13dbbfe87e3375e4c0e Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 10:49:05 +0200 Subject: [PATCH 07/12] use loops to define phase_currents --- motors/synrm_3f_36s.py | 4 ++-- motors/synrm_5f_40s.py | 9 +++------ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/motors/synrm_3f_36s.py b/motors/synrm_3f_36s.py index 0d689a2..aff22cd 100644 --- a/motors/synrm_3f_36s.py +++ b/motors/synrm_3f_36s.py @@ -209,8 +209,8 @@ def set_post_params(self): def assign_stator_coils(self, m2d: Maxwell2d) -> None: # Excitations - - phase_currents = [f"Im * cos(w*Time-{360 * k / self.geometry.n_phases}deg+epsI)" for k in range(self.geometry.n_phases)] + m = self.geometry.n_phases + phase_currents = [f"Im * cos(w*Time-{360 * k / m}deg+epsI)" for k in range(m)] groups = self.compute_phase_groups() diff --git a/motors/synrm_5f_40s.py b/motors/synrm_5f_40s.py index d807f85..1f0ac0a 100644 --- a/motors/synrm_5f_40s.py +++ b/motors/synrm_5f_40s.py @@ -93,11 +93,8 @@ def set_post_params(self): def assign_stator_coils(self, m2d: Maxwell2d) -> None: # Excitations - I_A = "Im1*cos(w*Time+epsI1-pi) + Im3*cos(3*(w*Time)+epsI3-pi)" - I_B = "Im1*cos(w*Time-72deg+epsI1-pi) + Im3*cos(3*(w*Time-72deg)+epsI3-pi)" - I_C = "Im1*cos(w*Time-144deg+epsI1-pi) + Im3*cos(3*(w*Time-144deg)+epsI3-pi)" - I_D = "Im1*cos(w*Time-216deg+epsI1-pi) + Im3*cos(3*(w*Time-216deg)+epsI3-pi)" - I_E = "Im1*cos(w*Time-288deg+epsI1-pi) + Im3*cos(3*(w*Time-288deg)+epsI3-pi)" + m = self.geometry.n_phases + phase_currents = [f"Im1 * cos(w*Time-{360 * k / m}deg+epsI1-pi)+Im3*cos(3*(w*Time-{360 * k / m}deg)+epsI3-pi)" for k in range(m)] groups = self.compute_phase_groups() @@ -105,7 +102,7 @@ def assign_stator_coils(self, m2d: Maxwell2d) -> None: for coil_name, polarity in group: m2d.assign_coil(assignment=[coil_name], conductors_number="Nc", polarity=polarity, name=f"CS_{coil_name}") - for phase_name, current, group in zip("ABCDE", [I_A, I_B, I_C, I_D, I_E], groups): + for phase_name, current, group in zip("ABCDE", phase_currents, groups): m2d.assign_winding( assignment=None, winding_type="Current", From e71273b678e7a0f446f51b1273b5f5b8c8a213c7 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 11:11:29 +0200 Subject: [PATCH 08/12] move general method to ComputationBase --- machine_design/designs/computation.py | 17 +++++++++++++++++ motors/synrm_3f_36s.py | 18 +----------------- motors/synrm_5f_40s.py | 18 +----------------- 3 files changed, 19 insertions(+), 34 deletions(-) diff --git a/machine_design/designs/computation.py b/machine_design/designs/computation.py index 425101d..fc2f592 100644 --- a/machine_design/designs/computation.py +++ b/machine_design/designs/computation.py @@ -71,6 +71,23 @@ def compute_solution_expressions(self): *[f"L(Phase{x},Phase{y})" for x in self.phases for y in self.phases], ] + def assign_phase_windings(self, m2d: Maxwell2d, phase_currents: list) -> None: + groups = self.compute_phase_groups() + for group in groups: + for coil_name, polarity in group: + m2d.assign_coil(assignment=[coil_name], conductors_number="Nc", polarity=polarity, name=f"CS_{coil_name}") + + for phase_name, current, group in zip(self.phases, phase_currents, groups): + m2d.assign_winding( + assignment=None, + winding_type="Current", + is_solid=False, + current=current, + parallel_branches="ParallelPaths", + name=f"Phase{phase_name}", + ) + m2d.add_winding_coils(assignment=f"Phase{phase_name}", coils=[f"CS_{coil_name}" for coil_name, _ in group]) + def extract_phase_results(self, solutions): # SI units flux_phases = np.stack([self.extract_expression(solutions, f"FluxLinkage(Phase{p})") for p in self.phases], axis=-1) diff --git a/motors/synrm_3f_36s.py b/motors/synrm_3f_36s.py index aff22cd..aebe994 100644 --- a/motors/synrm_3f_36s.py +++ b/motors/synrm_3f_36s.py @@ -211,23 +211,7 @@ def assign_stator_coils(self, m2d: Maxwell2d) -> None: # Excitations m = self.geometry.n_phases phase_currents = [f"Im * cos(w*Time-{360 * k / m}deg+epsI)" for k in range(m)] - - groups = self.compute_phase_groups() - - for group in groups: - for coil_name, polarity in group: - m2d.assign_coil(assignment=[coil_name], conductors_number="Nc", polarity=polarity, name=f"CS_{coil_name}") - - for phase_name, current, group in zip("ABC", phase_currents, groups): - m2d.assign_winding( - assignment=None, - winding_type="Current", - is_solid=False, - current=current, - parallel_branches="ParallelPaths", - name=f"Phase{phase_name}", - ) - m2d.add_winding_coils(assignment=f"Phase{phase_name}", coils=[f"CS_{coil_name}" for coil_name, _ in group]) + self.assign_phase_windings(m2d, phase_currents) def inductance_computation(self, m2d: Maxwell2d) -> None: m2d.change_inductance_computation(compute_transient_inductance=True, incremental_matrix=False) diff --git a/motors/synrm_5f_40s.py b/motors/synrm_5f_40s.py index 1f0ac0a..37dd914 100644 --- a/motors/synrm_5f_40s.py +++ b/motors/synrm_5f_40s.py @@ -95,23 +95,7 @@ def assign_stator_coils(self, m2d: Maxwell2d) -> None: # Excitations m = self.geometry.n_phases phase_currents = [f"Im1 * cos(w*Time-{360 * k / m}deg+epsI1-pi)+Im3*cos(3*(w*Time-{360 * k / m}deg)+epsI3-pi)" for k in range(m)] - - groups = self.compute_phase_groups() - - for group in groups: - for coil_name, polarity in group: - m2d.assign_coil(assignment=[coil_name], conductors_number="Nc", polarity=polarity, name=f"CS_{coil_name}") - - for phase_name, current, group in zip("ABCDE", phase_currents, groups): - m2d.assign_winding( - assignment=None, - winding_type="Current", - is_solid=False, - current=current, - parallel_branches="ParallelPaths", - name=f"Phase{phase_name}", - ) - m2d.add_winding_coils(assignment=f"Phase{phase_name}", coils=[f"CS_{coil_name}" for coil_name, _ in group]) + self.assign_phase_windings(m2d, phase_currents) def inductance_computation(self, m2d: Maxwell2d) -> None: m2d.change_inductance_computation(compute_transient_inductance=True, incremental_matrix=True) From 982fcf937f67734ad8c3fb778d238fd9384877d1 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 12:23:22 +0200 Subject: [PATCH 09/12] parameterize post_params() with phases --- motors/synrm_3f_36s.py | 10 +++------- motors/synrm_5f_40s.py | 24 +++--------------------- 2 files changed, 6 insertions(+), 28 deletions(-) diff --git a/motors/synrm_3f_36s.py b/motors/synrm_3f_36s.py index aebe994..2c47d8a 100644 --- a/motors/synrm_3f_36s.py +++ b/motors/synrm_3f_36s.py @@ -197,14 +197,10 @@ def set_output_vars(self): def set_post_params(self): self.post_params = { # reports - ("InducedVoltage(PhaseA)", "InducedVoltage(PhaseB)", "InducedVoltage(PhaseC)"): "InducedVoltage", + tuple(f"InducedVoltage(Phase{p})" for p in self.phases): "InducedVoltage", ("Moving1.Torque"): "Torque", - ("InputCurrent(PhaseA)", "InputCurrent(PhaseB)", "InputCurrent(PhaseC)"): "Current", - ( - "FluxLinkage(PhaseA)", - "FluxLinkage(PhaseB)", - "FluxLinkage(PhaseC)", - ): "FluxLinkage", + tuple(f"InputCurrent(Phase{p})" for p in self.phases): "Current", + tuple(f"FluxLinkage(Phase{p})" for p in self.phases): "FluxLinkage", } def assign_stator_coils(self, m2d: Maxwell2d) -> None: diff --git a/motors/synrm_5f_40s.py b/motors/synrm_5f_40s.py index 37dd914..93eddcf 100644 --- a/motors/synrm_5f_40s.py +++ b/motors/synrm_5f_40s.py @@ -67,28 +67,10 @@ def set_output_vars(self): def set_post_params(self): self.post_params = { # reports - ( - "InducedVoltage(PhaseA)", - "InducedVoltage(PhaseB)", - "InducedVoltage(PhaseC)", - "InducedVoltage(PhaseD)", - "InducedVoltage(PhaseE)", - ): "InducedVoltage", + tuple(f"InducedVoltage(Phase{p})" for p in self.phases): "InducedVoltage", ("Moving1.Torque"): "Torque", - ( - "InputCurrent(PhaseA)", - "InputCurrent(PhaseB)", - "InputCurrent(PhaseC)", - "InputCurrent(PhaseD)", - "InputCurrent(PhaseE)", - ): "Current", - ( - "FluxLinkage(PhaseA)", - "FluxLinkage(PhaseB)", - "FluxLinkage(PhaseC)", - "FluxLinkage(PhaseD)", - "FluxLinkage(PhaseE)", - ): "FluxLinkage", + tuple(f"InputCurrent(Phase{p})" for p in self.phases): "Current", + tuple(f"FluxLinkage(Phase{p})" for p in self.phases): "FluxLinkage", } def assign_stator_coils(self, m2d: Maxwell2d) -> None: From 18b2ccc912997a880ff3f276935e2eb9de841665 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 12:41:58 +0200 Subject: [PATCH 10/12] move post_params() to ComputationBase --- machine_design/designs/computation.py | 8 ++++++++ motors/synrm_3f_36s.py | 7 +------ motors/synrm_5f_40s.py | 7 +------ 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/machine_design/designs/computation.py b/machine_design/designs/computation.py index fc2f592..39d1b7c 100644 --- a/machine_design/designs/computation.py +++ b/machine_design/designs/computation.py @@ -71,6 +71,14 @@ def compute_solution_expressions(self): *[f"L(Phase{x},Phase{y})" for x in self.phases for y in self.phases], ] + def compute_post_params(self): + return { + tuple(f"InducedVoltage(Phase{p})" for p in self.phases): "InducedVoltage", + ("Moving1.Torque"): "Torque", + tuple(f"InputCurrent(Phase{p})" for p in self.phases): "Current", + tuple(f"FluxLinkage(Phase{p})" for p in self.phases): "FluxLinkage", + } + def assign_phase_windings(self, m2d: Maxwell2d, phase_currents: list) -> None: groups = self.compute_phase_groups() for group in groups: diff --git a/motors/synrm_3f_36s.py b/motors/synrm_3f_36s.py index 2c47d8a..049e1d8 100644 --- a/motors/synrm_3f_36s.py +++ b/motors/synrm_3f_36s.py @@ -196,12 +196,7 @@ def set_output_vars(self): self.output_vars = {} def set_post_params(self): - self.post_params = { # reports - tuple(f"InducedVoltage(Phase{p})" for p in self.phases): "InducedVoltage", - ("Moving1.Torque"): "Torque", - tuple(f"InputCurrent(Phase{p})" for p in self.phases): "Current", - tuple(f"FluxLinkage(Phase{p})" for p in self.phases): "FluxLinkage", - } + self.post_params = self.compute_post_params() def assign_stator_coils(self, m2d: Maxwell2d) -> None: # Excitations diff --git a/motors/synrm_5f_40s.py b/motors/synrm_5f_40s.py index 93eddcf..6525c4b 100644 --- a/motors/synrm_5f_40s.py +++ b/motors/synrm_5f_40s.py @@ -66,12 +66,7 @@ def set_output_vars(self): self.output_vars = {} def set_post_params(self): - self.post_params = { # reports - tuple(f"InducedVoltage(Phase{p})" for p in self.phases): "InducedVoltage", - ("Moving1.Torque"): "Torque", - tuple(f"InputCurrent(Phase{p})" for p in self.phases): "Current", - tuple(f"FluxLinkage(Phase{p})" for p in self.phases): "FluxLinkage", - } + self.post_params = self.compute_post_params() def assign_stator_coils(self, m2d: Maxwell2d) -> None: # Excitations From 058a72afaf19c9eab1af90664a63191dea396cf1 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 13:18:08 +0200 Subject: [PATCH 11/12] move solution_expressions, output_vars, and post_params to ComputationBase --- machine_design/designs/computation.py | 18 +++++++++--------- motors/synrm_3f_36s.py | 9 --------- motors/synrm_5f_40s.py | 9 --------- 3 files changed, 9 insertions(+), 27 deletions(-) diff --git a/machine_design/designs/computation.py b/machine_design/designs/computation.py index 39d1b7c..d061f7c 100644 --- a/machine_design/designs/computation.py +++ b/machine_design/designs/computation.py @@ -25,15 +25,6 @@ def __init__(self, geometry: GeometryBase) -> None: @abstractmethod def set_oper_params(self): ... - @abstractmethod - def set_solution_expressions(self): ... - - @abstractmethod - def set_output_vars(self): ... - - @abstractmethod - def set_post_params(self): ... - @abstractmethod def assign_stator_coils(self, m2d: Maxwell2d) -> None: ... @@ -79,6 +70,15 @@ def compute_post_params(self): tuple(f"FluxLinkage(Phase{p})" for p in self.phases): "FluxLinkage", } + def set_solution_expressions(self): + self.solution_expressions = self.compute_solution_expressions() + + def set_output_vars(self): + self.output_vars = {} + + def set_post_params(self): + self.post_params = self.compute_post_params() + def assign_phase_windings(self, m2d: Maxwell2d, phase_currents: list) -> None: groups = self.compute_phase_groups() for group in groups: diff --git a/motors/synrm_3f_36s.py b/motors/synrm_3f_36s.py index 049e1d8..7228355 100644 --- a/motors/synrm_3f_36s.py +++ b/motors/synrm_3f_36s.py @@ -189,15 +189,6 @@ def set_oper_params(self): } self.set_initpos() - def set_solution_expressions(self): - self.solution_expressions = self.compute_solution_expressions() - - def set_output_vars(self): - self.output_vars = {} - - def set_post_params(self): - self.post_params = self.compute_post_params() - def assign_stator_coils(self, m2d: Maxwell2d) -> None: # Excitations m = self.geometry.n_phases diff --git a/motors/synrm_5f_40s.py b/motors/synrm_5f_40s.py index 6525c4b..8776501 100644 --- a/motors/synrm_5f_40s.py +++ b/motors/synrm_5f_40s.py @@ -59,15 +59,6 @@ def set_oper_params(self): } self.set_initpos() - def set_solution_expressions(self): - self.solution_expressions = self.compute_solution_expressions() - - def set_output_vars(self): - self.output_vars = {} - - def set_post_params(self): - self.post_params = self.compute_post_params() - def assign_stator_coils(self, m2d: Maxwell2d) -> None: # Excitations m = self.geometry.n_phases From dfa1d4184f3f64848b9d339ccbc6de459ab2d1d7 Mon Sep 17 00:00:00 2001 From: haitao-ZCU Date: Fri, 2 Oct 2026 17:08:32 +0200 Subject: [PATCH 12/12] combine set_solution_expressions and compute_solution_expressions, set_post_params and compute_post_params --- machine_design/designs/computation.py | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/machine_design/designs/computation.py b/machine_design/designs/computation.py index d061f7c..5f8cfc0 100644 --- a/machine_design/designs/computation.py +++ b/machine_design/designs/computation.py @@ -52,8 +52,8 @@ def compute_phase_groups(self): Q = int(g.geom_params["SlotNumber"]) return phase_groups(Q, g.PolePairs, g.n_phases, belt_offset=g.belt_offset) - def compute_solution_expressions(self): - return [ + def set_solution_expressions(self): + self.solution_expressions = [ "Moving1.Position", "Moving1.Torque", *[f"FluxLinkage(Phase{p})" for p in self.phases], @@ -62,23 +62,17 @@ def compute_solution_expressions(self): *[f"L(Phase{x},Phase{y})" for x in self.phases for y in self.phases], ] - def compute_post_params(self): - return { + def set_output_vars(self): + self.output_vars = {} + + def set_post_params(self): + self.post_params = { tuple(f"InducedVoltage(Phase{p})" for p in self.phases): "InducedVoltage", ("Moving1.Torque"): "Torque", tuple(f"InputCurrent(Phase{p})" for p in self.phases): "Current", tuple(f"FluxLinkage(Phase{p})" for p in self.phases): "FluxLinkage", } - def set_solution_expressions(self): - self.solution_expressions = self.compute_solution_expressions() - - def set_output_vars(self): - self.output_vars = {} - - def set_post_params(self): - self.post_params = self.compute_post_params() - def assign_phase_windings(self, m2d: Maxwell2d, phase_currents: list) -> None: groups = self.compute_phase_groups() for group in groups: