Source code for pyleecan.Functions.Electrical.solve_FEMM

from numpy import zeros
from os.path import splitext
from ...Functions.FEMM.update_FEMM_simulation import update_FEMM_simulation
from ...Functions.FEMM.comp_FEMM_Phi_wind import comp_FEMM_Phi_wind


[docs]def solve_FEMM(obj, femm, output, sym, FEMM_dict): L1 = output.simu.machine.stator.comp_length() Nt_tot = obj.Nt_tot # Number of time step is_internal_rotor = output.simu.machine.rotor.is_internal if ( hasattr(output.simu.machine.stator, "winding") and output.simu.machine.stator.winding is not None ): qs = output.simu.machine.stator.winding.qs # Winding phase number Npcpp = output.simu.machine.stator.winding.Npcpp Phi_wind_stator = zeros((Nt_tot, qs)) else: Phi_wind_stator = None # Interpolate current on electric model time axis # Get stator current from elec out Is = output.elec.comp_I_mag(time=output.elec.Time.values, is_stator=True) # Get rotor current from elec out Ir = output.elec.comp_I_mag(time=output.elec.Time.values, is_stator=False) # Get rotor angular position angle_rotor = output.get_angle_rotor()[0:Nt_tot] # Create the mesh femm.mi_createmesh() # Compute the data for each time step for ii in range(Nt_tot): # Update rotor position and currents update_FEMM_simulation( femm, FEMM_dict["circuits"], is_internal_rotor, obj.is_sliding_band, angle_rotor, Is, Ir, ii, ) # try "previous solution" for speed up of FEMM calculation if obj.is_sliding_band: try: base = FEMM_dict["path_save"] ans_file = splitext(base)[0] + ".ans" femm.mi_setprevious(ans_file, 0) except: pass # Run the computation femm.mi_analyze() femm.mi_loadsolution() if Phi_wind_stator is not None: # Phi_wind computation Phi_wind_stator[ii, :] = comp_FEMM_Phi_wind( femm, qs, Npcpp, is_stator=True, Lfemm=FEMM_dict["Lfemm"], L1=L1, sym=sym, ) return Phi_wind_stator