Source code for pyleecan.Methods.Machine.LamSlot.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
from ....Classes.SurfRing import SurfRing
from ....Methods.Machine.Lamination.build_geometry import build_geometry as build_geo
[docs]def build_geometry(self, sym=1, alpha=0, delta=0):
"""Build the geometry of the LamSlot object
Parameters
----------
self : LamSlot
a LamSlot 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
"""
if self.is_stator:
label = "Lamination_Stator" # Label lamination
else:
label = "Lamination_Rotor"
if self.is_internal:
lb = "Ext" # label for the bore
ly = "Int" # label for the yoke
else:
lb = "Int"
ly = "Ext"
label_bore = label + "_Bore_Radius_" + lb
label_yoke = label + "_Yoke_Radius_" + ly
Ryoke = self.get_Ryoke()
H_yoke = self.comp_height_yoke()
if self.slot is not None and self.slot.Zs != 0:
# getting Number of Slot
Zs = self.slot.Zs
# Check for symmetry
assert (Zs % sym) == 0, (
"ERROR, Wrong symmetry for "
+ label
+ " "
+ str(Zs)
+ " slots and sym="
+ str(sym)
)
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"])
elif "lines" in bore: # Duplicated slot
for line in bore["lines"]:
bore_list.append(type(line)(init_dict=line.as_dict()))
bore_list[-1].rotate((bore["begin_angle"] + bore["end_angle"]) / 2)
else: # Notches
lines = bore["obj"].build_geometry()
for line in lines:
line.rotate((bore["begin_angle"] + bore["end_angle"]) / 2)
bore_list.extend(lines)
# Set line label
for line in bore_list:
line.label = label_bore
else: # No slot
return build_geo(self, sym=sym, alpha=alpha, delta=delta)
# Create the lamination surface(s)
surf_list = list()
if sym == 1: # Complete lamination
if self.is_internal:
point_ref = Ryoke + (H_yoke / 2)
else:
point_ref = Ryoke - (H_yoke / 2)
# Create Slot surface
surf_slot = SurfLine(line_list=bore_list, label=label_bore, point_ref=point_ref)
# Create yoke circle surface
surf_yoke = Circle(
radius=Ryoke, label=label_yoke, line_label=label_yoke, center=0
)
if self.Rint == 0:
surf_list = [surf_slot]
elif self.is_internal:
surf_list.append(
SurfRing(
out_surf=surf_slot,
in_surf=surf_yoke,
label=label,
point_ref=point_ref,
)
)
else:
surf_list.append(
SurfRing(
out_surf=surf_yoke,
in_surf=surf_slot,
label=label,
point_ref=point_ref,
)
)
else: # Only one surface
# Add the Yoke part
Zy1 = Ryoke
Zy2 = Ryoke * exp(1j * 2 * pi / sym)
bore_list.append(
Segment(bore_list[-1].get_end(), Zy2, label=label + "_Yoke_Side_Left")
)
if Ryoke > 0: # For internal lamination
bore_list.append(
Arc1(
begin=Zy2,
end=Zy1,
radius=-Ryoke,
is_trigo_direction=False,
label=label_yoke,
)
)
bore_list.append(
Segment(Zy1, bore_list[0].get_begin(), label=label + "_Yoke_Side_Right")
)
# 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=label_bore, 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