Source code for pyleecan.Methods.Machine.WindingUD.comp_connection_mat
# -*- coding: utf-8 -*-
from ....Methods.Machine.Winding import WindingError
from ....Functions.Winding.reverse_wind_mat import reverse_wind_mat
from ....Functions.Winding.shift_wind_mat import shift_wind_mat
from numpy import tile
[docs]def comp_connection_mat(self, Zs=None):
"""Compute the Winding Matrix (for winding type 0)
Type 0 : User defined
Parameters
----------
self : Winding
A: Winding object
Zs : int
Number of Slot (Integer >0)
Returns
-------
wind_mat: numpy.ndarray
Winding Matrix (Nlay_rad, Nlay_tan, Zs, qs)
Raises
------
WindingT0DefSumError
the sum of the element in user_wind_mat
must be null
WindingT0DefShapeError
user_wind_mat shape must be (Nlay_rad,
Nlay_tan,Zs,qs)
"""
if Zs is None:
if self.parent is None:
raise WindingError(
"ERROR: The Winding object must be in a Lamination object."
)
if self.parent.slot is None:
raise WindingError(
"ERROR: The Winding object must be in a Lamination object with Slot."
)
Zs = self.parent.slot.Zs
assert Zs > 0, "Zs must be >0"
assert Zs % 1 == 0, "Zs must be an integer"
wind_mat = self.user_wind_mat
shape = wind_mat.shape
if Zs % shape[2]:
raise WindingT0DefShapeError(
"wrong winding definition, wrong "
"user_wind_mat shape, must be (Nlay_rad, "
"Nlay_tan, integer*Zs,qs), Zs = "
+ str(Zs)
+ " but "
+ str(shape)
+ " given !"
)
elif shape[3] != self.qs:
raise WindingT0DefShapeError(
"wrong winding definition, wrong "
"user_wind_mat shape, must be (Nlay_rad, "
"Nlay_tan, Zs,qs), qs = " + str(self.qs) + " but " + str(shape) + " given !"
)
if wind_mat.sum() != 0:
raise WindingT0DefSumError(
"wrong winding definition, the sum of the "
"element in user_wind_mat isn't null !"
)
# tile
wind_mat = tile(wind_mat, [1, 1, Zs // wind_mat.shape[2], 1])
# Set default values
if self.is_reverse_wind is None:
self.is_reverse_wind = False
if self.Nslot_shift_wind is None:
self.Nslot_shift_wind = 0
# Apply the transformations
if self.is_reverse_wind:
wind_mat = reverse_wind_mat(wind_mat)
if self.Nslot_shift_wind > 0:
wind_mat = shift_wind_mat(wind_mat, self.Nslot_shift_wind)
return wind_mat
[docs]class WindingT0DefShapeError(WindingError):
""" """
pass
[docs]class WindingT0DefSumError(WindingError):
""" """
pass