Source code for pyleecan.Methods.Machine.LamSlotMulti.build_geometry
# -*- coding: utf-8 -*-
from numpy import pi, angle, exp
from ....Classes.Circle import Circle
from ....Classes.SurfLine import SurfLine
from ....Classes.Arc1 import Arc1
from ....Classes.Segment import Segment
[docs]def build_geometry(self, sym=1, alpha=0, delta=0):
"""Build the geometry of the LamSlotMulti object
Parameters
----------
self : LamSlotMulti
a LamSlotMulti object
sym : int
Symmetry factor (1= full machine, 2= half of the machine...)
alpha : float
Angle for rotation [rad]
delta : complex
Complex value for translation
Returns
-------
surf_list : list
list of surfaces needed to draw the lamination
"""
# getting Number of Slot
Zs = self.get_Zs()
# Check for symmetry
assert (Zs % sym) == 0
if self.is_stator:
ll = "Stator" # Label lamination
else:
ll = "Rotor"
if self.is_internal:
ls = "Ext" # label for the slot
ly = "Int" # label for the yoke
else:
ls = "Int"
ly = "Ext"
Ryoke = self.get_Ryoke()
Rbo = self.get_Rbo()
H_yoke = self.comp_height_yoke()
bore_desc = self.get_bore_desc(sym=sym)
bore_list = list()
for bore in bore_desc:
if type(bore["obj"]) is Arc1:
bore_list.append(bore["obj"])
else:
lines = bore["obj"].build_geometry()
for line in lines:
line.rotate((bore["begin_angle"] + bore["end_angle"]) / 2)
bore_list.extend(lines)
# Create the lamination surface(s)
surf_list = list()
if sym == 1: # Complete lamination
# Create Slot surface
surf_slot = SurfLine(
line_list=bore_list, label="Lamination_" + ll + "_Bore_" + ls
)
if self.is_internal:
surf_slot.point_ref = Ryoke + (H_yoke / 2)
else:
surf_slot.point_ref = Ryoke - (H_yoke / 2)
# Create yoke circle surface
if Ryoke > 0:
surf_yoke = Circle(
radius=Ryoke,
label="Lamination_" + ll + "_Yoke_" + ly,
line_label=ll + "_Yoke_Radius",
center=0,
)
# The order matters when plotting
if self.is_internal:
surf_list.append(surf_slot)
if Ryoke > 0:
surf_list.append(surf_yoke)
else:
surf_yoke.point_ref = None # No need to set the surface
surf_list.append(surf_yoke)
surf_list.append(surf_slot)
else: # Only one surface
# Add the Yoke part
Zy1 = Ryoke
Zy2 = Ryoke * exp(1j * 2 * pi / sym)
bore_list.append(
Segment(Rbo * exp(1j * (2 * pi / sym)), Zy2, label=ll + "_Yoke_Side_Right")
)
if Ryoke > 0:
# For internal lamination Ryoke can be 0
bore_list.append(
Arc1(
begin=Zy2,
end=Zy1,
radius=-Ryoke,
is_trigo_direction=False,
label=ll + "_Yoke_Radius",
)
)
bore_list.append(Segment(Zy1, Rbo, label=ll + "_Yoke_Side_Left"))
# Create a Surface for the slot
if self.is_internal:
point_ref = (Ryoke + H_yoke / 2) * exp(1j * pi / sym)
else:
point_ref = (Ryoke - H_yoke / 2) * exp(1j * pi / sym)
surf_slot = SurfLine(
line_list=bore_list,
label="Lamination_" + ll + "_Bore_" + ls,
point_ref=point_ref,
)
surf_list.append(surf_slot)
# Apply the transformations
for surf in surf_list:
surf.rotate(alpha)
surf.translate(delta)
# Adding the ventilation surfaces
for vent in self.axial_vent:
surf_list += vent.build_geometry(
sym=sym, alpha=alpha, delta=delta, is_stator=self.is_stator
)
return surf_list