Source code for pyleecan.Functions.FEMM.create_FEMM_circuit

# -*- coding: utf-8 -*-

from numpy import linalg as LA, pi, sign, sqrt

# TODO: function seems to be unused, remove ?
[docs]def create_FEMM_circuit(femm, label, is_eddies, lam, I, is_mmf, j_t0, materials): """Set in FEMM circuits property Parameters ---------- femm : FEMMHandler client to send command to a FEMM instance label : label of the surface sym : integer for symmetry is_eddies : 1 to calculate eddy currents lam : LamSlotWind Lamination to set the winding I : ndarray Lamination currents waveforms is_mmf : 1 to compute the lamination magnetomotive force / lamination magnetic field j_t0 : time step for winding current calculation@type integer materials : list of materials already created in FEMM Returns ------- (str, list) the property of the surface having label as surf.label and materials """ is_defcirc = 1 # 1 to define circuits (necessary for eddy current loss kJ = 1 # estimation in AC mode, not necessary for magnetostatics) Zs = lam.slot.Zs rho = lam.mat_type.elec.rho # Resistivity at 20°C wind_mat = lam.winding.comp_connection_mat(Zs) # number of parallel circuits per phase (maximum 2p) Npcpp = lam.winding.Npcpp Ntcoil = lam.winding.Ntcoil # number of turns per coil Swire = lam.winding.conductor.comp_surface() Sact = lam.winding.conductor.comp_active_surface() if "Rotor" in label: # winding on the rotor Jlabel = "Jr" Clabel = "Circr" else: Jlabel = "Js" Clabel = "Circs" st = label.split("_") Nr = int(st[1][1:]) # zone radial coordinate Nt = int(st[2][1:]) # zone tangential coordinate pos = int(st[3][1:]) # Zone slot number coordinate A = wind_mat[Nr, Nt, pos, :] for zz in range(len(A)): # search for the phase of the winding if A[zz] != 0: q = zz # circuit definition if is_defcirc: if I.size == 0 or LA.norm(I) == 0: femm.mi_addcircprop(Clabel + str(q), 0, 1) # series connected else: femm.mi_addcircprop( Clabel + str(q), is_mmf * I[j_t0][q] / Npcpp, 1 ) # series connected # definition of armature field current sources and circuits s = sign(wind_mat[Nr, Nt, pos, q]) # same as the sign of Cwind1 if s == 1: cname = Jlabel + str(q) + "+" else: cname = Jlabel + str(q) + "-" if LA.norm(I) == 0: Jcus = 0 else: # equivalent stator current density [A/mm2] Jcus = kJ * 1e-6 * Ntcoil * (I[j_t0, q] / Npcpp) * is_mmf / Sact if cname not in materials: # adding new current source material if necessary femm.mi_addmaterial( cname, 1, 1, 0, s * Jcus, is_eddies * 1e-6 / rho, 0, 0, 1, 0, 0, 0, 1, sqrt(4 * Swire / pi), ) materials.append(cname) return cname, materials