Source code for pyleecan.Methods.Slot.SlotW22.build_geometry_wind
# -*- coding: utf-8 -*-
from numpy import exp, linspace, meshgrid
from ....Classes.Arc1 import Arc1
from ....Classes.Segment import Segment
from ....Classes.SurfLine import SurfLine
[docs]def build_geometry_wind(self, Nrad, Ntan, is_simplified=False, alpha=0, delta=0):
"""Split the slot winding area in several zone
Parameters
----------
self : SlotW22
A SlotW22 object
Nrad : int
Number of radial layer
Ntan : int
Number of tangentiel layer
is_simplified : bool
boolean to specify if coincident lines are considered as one or different lines (Default value = False)
alpha : float
Angle for rotation (Default value = 0) [rad]
delta : Complex
complex for translation (Default value = 0)
Returns
-------
surf_list:
List of surface delimiting the winding zone
"""
# get the name of the lamination
st = self.get_name_lam()
Rbo = self.get_Rbo()
# Polar Meshgrid
if self.is_outwards():
r = linspace(Rbo + self.H0, Rbo + self.H0 + self.H2, Nrad + 1)
else:
r = linspace(Rbo - self.H0, Rbo - self.H0 - self.H2, Nrad + 1)
theta = linspace(-self.W2 / 2.0, self.W2 / 2.0, Ntan + 1)
Z = meshgrid(r, theta)
Z = Z[0] * exp(1j * Z[1])
Z = Z.T
if self.is_outwards():
assert Z[0][0] == (Rbo + self.H0) * exp(-1j * self.W2 * 0.5) # Z6
assert Z[Nrad][0] == (Rbo + self.H0 + self.H2) * exp(-1j * self.W2 * 0.5) # Z5
assert Z[0][Ntan] == (Rbo + self.H0) * exp(1j * self.W2 * 0.5) # Z3
assert Z[Nrad][Ntan] == (Rbo + self.H0 + self.H2) * exp(
1j * self.W2 * 0.5
) # Z4
else:
assert Z[0][0] == (Rbo - self.H0) * exp(-1j * self.W2 * 0.5) # Z6
assert Z[Nrad][0] == (Rbo - self.H0 - self.H2) * exp(-1j * self.W2 * 0.5) # Z5
assert Z[0][Ntan] == (Rbo - self.H0) * exp(1j * self.W2 * 0.5) # Z3
assert Z[Nrad][Ntan] == (Rbo - self.H0 - self.H2) * exp(
1j * self.W2 * 0.5
) # Z4
surf_list = list()
for jj in range(Ntan): # jj from 0 to Ntan-1
for ii in range(Nrad): # ii from 0 to Nrad-1
Z1 = Z[ii][jj]
Z2 = Z[ii][jj + 1]
Z3 = Z[ii + 1][jj + 1]
Z4 = Z[ii + 1][jj]
point_ref = (
Z[ii][jj] + Z[ii][jj + 1] + Z[ii + 1][jj + 1] + Z[ii + 1][jj]
) / 4 # the reference point of the surface
if is_simplified: # No doubling Line allowed
curve_list = list()
if ii == 0:
curve_list.append(Arc1(Z1, Z2, abs(Z1), is_trigo_direction=True))
if jj != Ntan - 1:
curve_list.append(Segment(Z2, Z3))
if ii != Nrad - 1:
curve_list.append(Arc1(Z3, Z4, -abs(Z3), is_trigo_direction=False))
surface = SurfLine(
line_list=curve_list,
label="Wind_" + st + "_R" + str(ii) + "_T" + str(jj) + "_S0",
point_ref=point_ref,
)
surf_list.append(surface)
else:
curve_list = list()
curve_list.append(Arc1(Z1, Z2, abs(Z1), is_trigo_direction=True))
curve_list.append(Segment(Z2, Z3))
curve_list.append(Arc1(Z3, Z4, -abs(Z3), is_trigo_direction=False))
curve_list.append(Segment(Z4, Z1))
surface = SurfLine(
line_list=curve_list,
label="Wind_" + st + "_R" + str(ii) + "_T" + str(jj) + "_S0",
point_ref=point_ref,
)
surf_list.append(surface)
for surf in surf_list:
surf.rotate(alpha)
surf.translate(delta)
return surf_list