Source code for pyleecan.Methods.Slot.SlotM16.build_geometry_active
# -*- coding: utf-8 -*-
from numpy import zeros, linspace
from ....Classes.Segment import Segment
from ....Classes.SurfLine import SurfLine
[docs]def build_geometry_active(self, Nrad, Ntan, is_simplified=False, alpha=0, delta=0):
"""Split the slot winding area in several zone
Parameters
----------
self : SlotM16
A SlotM16 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
List of surface delimiting the winding zone
"""
# get the name of the lamination
st = self.get_name_lam()
[Z12, Z11, Z10, Z9, Z8, Z7, Z6, Z5, Z4, Z3, Z2, Z1] = self._comp_point_coordinate()
X = linspace(Z8, Z7, Nrad + 1)
# Nrad+1 and Ntan+1 because 3 points => 2 zones
Z = zeros((Nrad + 1, Ntan + 1), dtype=complex)
for ii in range(Nrad + 1):
Z[ii][:] = linspace(X[ii], X[ii].conjugate(), Ntan + 1)
assert Z[0][0] == Z8
assert Z[Nrad][0] == Z7
assert Z[0][Ntan] == Z5
assert Z[Nrad][Ntan] == Z6
Z_8 = Z5 + (self.W2 / 2) + (self.W1 / 2)
Z_5 = Z5 + (self.W2 / 2) - (self.W1 / 2)
# We go thought the zone by Rad then Tan, starting by (0,0)
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 = (Z1 + Z2 + Z3 + Z4) / 4
# With one zone the order would be [Z7,Z4,Z5,Z6]
if is_simplified:
curve_list = list()
if ii == 0:
if Z1 > Z_8 and Z_5 < Z2 < Z_8:
curve_list.append(Segment(Z_8, Z2))
elif Z_5 < Z1 < Z_8 and Z_5 < Z2 < Z_8:
curve_list.append(Segment(Z1, Z2))
elif Z2 < Z_5 and Z_5 < Z1 < Z_8:
curve_list.append(Segment(Z1, Z_5))
if jj != Ntan - 1:
curve_list.append(Segment(Z2, Z3))
if ii != Nrad - 1:
curve_list.append(Segment(Z3, Z4))
label = "Wind_" + st + "_R" + str(ii) + "_T" + str(jj) + "_S0"
surface = SurfLine(
line_list=curve_list, label=label, point_ref=point_ref
)
surf_list.append(surface)
else:
curve_list = list()
curve_list.append(Segment(Z1, Z2))
curve_list.append(Segment(Z2, Z3))
curve_list.append(Segment(Z3, Z4))
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