Source code for Tests.Validation.Simulation.test_EEC_FEMM_IPMSM

from os.path import join
from numpy.testing import assert_almost_equal

from Tests import save_validation_path as save_path
from numpy import sqrt, pi
from pyleecan.Classes.Simu1 import Simu1


from pyleecan.Classes.InputElec import InputElec
from pyleecan.Classes.Electrical import Electrical
from pyleecan.Classes.EEC_PMSM import EEC_PMSM
from pyleecan.Classes.FluxLinkFEMM import FluxLinkFEMM
from pyleecan.Classes.IndMagFEMM import IndMagFEMM
from pyleecan.Classes.MagFEMM import MagFEMM
from pyleecan.Classes.Output import Output
import pytest
from pyleecan.Functions.load import load
from pyleecan.definitions import DATA_DIR


[docs]@pytest.mark.long @pytest.mark.validation @pytest.mark.FEMM def test_EEC_FEMM_IPMSM(): """Validation of the PMSM Electrical Equivalent Circuit with the Prius machine Compute Torque from EEC results and compare with Yang et al, 2013 """ IPMSM_A = load(join(DATA_DIR, "Machine", "IPMSM_A.json")) simu = Simu1(name="EEC_FEMM_IPMSM", machine=IPMSM_A) # Definition of the input simu.input = InputElec(N0=2000, Nt_tot=10, Na_tot=2048) simu.input.set_Id_Iq(I0=250 / sqrt(2), Phi0=60 * pi / 180) # Define second simu for FEMM comparison simu2 = simu.copy() # Definition of the electrical simulation (FEMM) simu.elec = Electrical() simu.elec.eec = EEC_PMSM( indmag=IndMagFEMM(is_periodicity_a=True, Nt_tot=10), fluxlink=FluxLinkFEMM(is_periodicity_a=True, Nt_tot=10), ) simu.mag = None simu.force = None simu.struct = None out = Output(simu=simu) simu.run() # Definition of the magnetic simulation (FEMM) simu2.mag = MagFEMM( type_BH_stator=0, type_BH_rotor=0, is_periodicity_a=True, ) out2 = Output(simu=simu2) simu2.run() # Plot 3-phase current function of time out.plot_2D_Data( "elec.Is", "time", "phase", save_path=join(save_path, "EEC_FEMM_IPMSM_currents.png"), is_show_fig=False, ) # from Yang et al, 2013 assert_almost_equal(out.elec.Tem_av_ref, 81.81, decimal=1) assert_almost_equal(out2.mag.Tem_av, 81.70, decimal=1) return out, out2
# To run it without pytest if __name__ == "__main__": out, out2 = test_EEC_FEMM_IPMSM()