Пример #1
0
def get_airgap_surface(lam_int, lam_ext):
    """Returns a list of surface in the airgap without sliding band surface

    Parameters
    ----------
    lam_int:
        Internal lamination
    lam_ext:
        External lamination

    Returns
    -------
    surf_list: list
        List of surface in the airgap including the sliding band surface
    """

    Rgap_mec_int = lam_int.comp_radius_mec()
    Rgap_mec_ext = lam_ext.comp_radius_mec()
    Wgap_mec = Rgap_mec_ext - Rgap_mec_int
    W_sb = Wgap_mec / 3  # Width sliding band
    surf_list = list()

    # Middle
    surf_list.append(
        SurfLine(
            line_list=[],
            point_ref=(Rgap_mec_int + W_sb * 3 / 2) * exp(1j * pi / 2),
            label="Airgap",
        ))

    return surf_list
Пример #2
0
def gen_curve_list(point_list, RX, TY, st):
    """

    Parameters
    ----------
    point_list :

    RX :

    TY :

    st :


    Returns
    -------

    """
    curve_list = list()
    for ii in range(len(point_list) - 1):
        curve_list.append(Segment(point_list[ii], point_list[ii + 1]))
    curve_list.append(Segment(point_list[-1], point_list[0]))

    res = 0
    for Z in point_list:
        res += Z
    point_ref = res / len(point_list)
    surface = SurfLine(
        line_list=curve_list,
        label="Wind" + st + "_R" + RX + "_T" + TY + "_S0",
        point_ref=point_ref,
    )
    return surface
Пример #3
0
 def test_translate(self):
     """Check that you can rotate the surface
     """
     line1 = Arc1(begin=1, end=1j, radius=1)
     line2 = Arc2(begin=1, center=0, angle=pi / 2)
     line3 = Segment(begin=1j, end=0)
     surface = SurfLine(line_list=[line1, line2, line3],
                        label="test",
                        point_ref=0)
     surface.translate(1j)
     self.assertAlmostEqual(abs(line1.begin - 1j), 1)
     self.assertAlmostEqual(line1.end, 2j)
     self.assertAlmostEqual(abs(line2.begin - 1j), 1)
     self.assertAlmostEqual(abs(line2.center - 1j), 0)
     self.assertAlmostEqual(abs(line3.begin - 2j), 0)
     self.assertAlmostEqual(line3.end, 1j)
Пример #4
0
    def test_comp_length(self):
        """Check that you can compute the length of the Surface
        """
        line1 = Arc1(begin=1, end=1j, radius=1)
        line1.comp_length = MagicMock(return_value=1)
        line2 = Arc2(begin=1, center=0, angle=pi / 2)
        line2.comp_length = MagicMock(return_value=1)
        line3 = Segment(begin=1j, end=0)
        line3.comp_length = MagicMock(return_value=1)

        surface = SurfLine(line_list=[line1, line2, line3],
                           label="test",
                           point_ref=0)
        length = surface.comp_length()
        line1.comp_length.assert_called_once()
        line2.comp_length.assert_called_once()
        line3.comp_length.assert_called_once()
        self.assertAlmostEqual(abs(length - 3), 0)
Пример #5
0
def build_geometry(self, alpha=0, delta=0, is_simplified=False):
    """Compute the curve (Arc) needed to plot the Hole.
    The ending point of a curve is the starting point of the next curve in the
    list

    Parameters
    ----------
    self : HoleM54
        A HoleM54 object
    alpha : float
        Angle to rotate the slot (Default value = 0) [rad]
    delta : complex
        Complex to translate the slot (Default value = 0)
    is_simplified : bool
       True to avoid line superposition

    Returns
    -------
    surf_list : list
        List of Air Surface on the slot

    """

    Rbo = self.get_Rbo()

    # Compute point coordinates
    Zc0 = Rbo - self.H0 + self.R1
    Z1 = (self.R1 * exp(1j * (-pi + self.W0 / 2))) + Zc0
    Z2 = (self.R1 * exp(1j * (pi - self.W0 / 2))) + Zc0
    Z4 = ((self.R1 + self.H1) * exp(1j * (-pi + self.W0 / 2))) + Zc0
    Z3 = ((self.R1 + self.H1) * exp(1j * (pi - self.W0 / 2))) + Zc0
    Zref = Rbo - self.H0 - self.H1 / 2

    surf_list = list()
    curve_list = list()
    curve_list.append(Arc1(begin=Z1, end=Z2, radius=-self.R1, is_trigo_direction=False))
    curve_list.append(Arc3(begin=Z2, end=Z3, is_trigo_direction=True))
    curve_list.append(Arc1(begin=Z3, end=Z4, radius=self.R1 + self.H1))
    curve_list.append(Arc3(begin=Z4, end=Z1, is_trigo_direction=True))

    if self.get_is_stator():  # check if the slot is on the stator
        st = "_Stator"
    else:
        st = "_Rotor"
    surf_list.append(
        SurfLine(line_list=curve_list, label="Hole" + st + "_R0_T0_S0", point_ref=Zref)
    )

    # Apply the transformations
    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)

    return surf_list
Пример #6
0
def get_surface_tooth(self):
    """Returns the surface delimiting the tooth (including yoke part)

    Parameters
    ----------
    self : Slot
        A Slot object

    Returns
    -------
    surface: SurfLine
        A SurfLine object representing the slot

    """

    if self.parent is not None:
        Ryoke = self.parent.get_Ryoke()
    else:
        raise ParentMissingError("Error: The slot is not inside a Lamination")

    curve_list = list()
    # tooth lines
    top_list = self.build_geometry_half_tooth(is_top=True)
    bot_list = self.build_geometry_half_tooth(is_top=False)
    # Yoke lines
    Z1 = Ryoke * exp(1j * pi / self.Zs)
    Z2 = Ryoke * exp(-1j * pi / self.Zs)
    curve_list.append(
        Segment(top_list[-1].get_end(), Z1, label="Tooth_Yoke_Side"))
    if Ryoke > 0:
        curve_list.append(
            Arc1(
                begin=Z1,
                end=Z2,
                radius=-Ryoke,
                is_trigo_direction=False,
                label="Tooth_Yoke_Arc",
            ))
    curve_list.append(
        Segment(Z2, bot_list[0].get_begin(), label="Tooth_Yoke_Side"))
    # Second half of the tooth
    curve_list.extend(bot_list)
    curve_list.extend(top_list)

    return SurfLine(line_list=curve_list, label="Tooth")
Пример #7
0
def build_geometry(self, sym=1, alpha=0, delta=0):
    """Build the geometry of the shaft

    Parameters
    ----------
    self : Shaft
        Shaft 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
    
    """
    surf_list = list()

    if sym == 1:
        surf_list.append(
            Circle(radius=self.Drsh / 2, label="Shaft", center=0, point_ref=0))
    else:
        begin = self.Drsh / 2
        end = begin * exp(1j * 2 * pi / sym)
        surface = SurfLine(
            line_list=[
                Segment(0, begin),
                Arc1(begin, end, self.Drsh / 2),
                Segment(end, 0),
            ],
            label="Shaft",
            point_ref=0,
        )
        surf_list.append(surface)
    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)
    return surf_list
Пример #8
0
def get_surface(self):
    """Returns the surface delimiting the slot

    Parameters
    ----------
    self : Slot
        A Slot object

    Returns
    -------
    surface: SurfLine
        A SurfLine object representing the slot

    """
    Rbo = self.get_Rbo()
    curve_list = self.build_geometry()
    Zbegin = curve_list[-1].get_end()
    Zend = curve_list[0].get_begin()
    curve_list.append(Arc1(Zbegin, Zend, -Rbo))

    return SurfLine(line_list=curve_list, label="Slot")
Пример #9
0
def build_geometry(self, sym=1, alpha=0, delta=0):
    """Build the geometry of the Lamination

    Parameters
    ----------
    self : Lamination
        Lamination 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

    """
    # Lamination label
    if self.is_stator:
        label = "Lamination_Stator"
    else:
        label = "Lamination_Rotor"

    if self.is_internal:
        ls = "_Bore_"  # label for the bore
        ly = "_Yoke_"  # label for the yoke
    else:
        ls = "_Yoke_"
        ly = "_Bore_"

    surf_list = list()

    if sym == 1:  # Complete lamination
        surface_yoke = Circle(
            radius=self.Rext,
            label=label + ly + "Ext",
            center=0,
            point_ref=self.Rint + (self.Rext - self.Rint) / 2,
        )
        surf_list.append(surface_yoke)
        if self.Rint > 0:
            surface = Circle(radius=self.Rint,
                             label=label + ls + "Int",
                             center=0,
                             point_ref=0)
            surf_list.append(surface)
    else:  # Part of the lamination by symmetry
        Z0 = self.Rint
        Z1 = self.Rext
        Z3 = Z0 * exp(1j * 2 * pi / sym)
        Z2 = Z1 * exp(1j * 2 * pi / sym)
        curve_list = list()
        curve_list.append(Segment(Z0, Z1))
        curve_list.append(
            Arc1(begin=Z1, end=Z2, radius=self.Rext, is_trigo_direction=True))
        curve_list.append(Segment(Z2, Z3))
        if self.Rint > 0:
            curve_list.append(
                Arc1(begin=Z3,
                     end=Z0,
                     radius=self.Rint,
                     is_trigo_direction=False))
        surf_yoke = SurfLine(
            line_list=curve_list,
            label=label + "_Ext",
            point_ref=self.Rint + (self.Rext - self.Rint) / 2,
        )
        surf_list.append(surf_yoke)

    # Add the ventilation ducts if there is any
    for vent in self.axial_vent:
        surf_list.extend(vent.build_geometry(sym=sym,
                                             is_stator=self.is_stator))

    # apply the transformation
    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)

    return surf_list
Пример #10
0
def build_geometry_wind(self,
                        Nrad,
                        Ntan,
                        is_simplified=False,
                        alpha=0,
                        delta=0):
    """Split the slot winding area in several zone

    Parameters
    ----------
    self : SlotW23
        A SlotW23 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

    """

    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"

    [Z8, Z7, Z6, Z5, Z4, Z3, Z2, Z1] = self._comp_point_coordinate()
    X = linspace(Z6, Z5, 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)

    # The bottom and top are Arc and not a line
    Z[0][:] = abs(Z6) * exp(1j * linspace(angle(Z6), angle(Z3), Ntan + 1))
    Z[Nrad][:] = abs(Z5) * exp(1j * linspace(angle(Z5), angle(Z4), Ntan + 1))

    assert abs(Z[0][0] - Z6) < 1e-6
    assert abs(Z[Nrad][0] - Z5) < 1e-6
    assert abs(Z[0][Ntan] - Z3) < 1e-6
    assert abs(Z[Nrad][Ntan] - Z4) < 1e-6

    Zc = 0  # Center of the machine

    # 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 [Z6,Z3,Z4,Z5]
            if is_simplified:  # No doubling Line allowed
                curve_list = list()
                if ii == 0:
                    curve_list.append(Segment(Z1, Z2))
                if jj != Ntan - 1:
                    curve_list.append(Segment(Z2, Z3))
                if ii != Nrad - 1:
                    curve_list.append(Segment(Z3, Z4))
                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(Segment(Z1, Z2))
                curve_list.append(Segment(Z2, Z3))
                if ii == Nrad - 1:  # Top zone
                    curve_list.append(Arc2(Z3, Zc, angle(Z4) - angle(Z3)))
                else:
                    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
Пример #11
0
    def test_Lam_Wind_10_wind_22(self):
        """Test machine plot with Slot 10 and winding rad=2, tan=2
		"""
        print("\nTest plot Slot 10")
        plt.close("all")
        test_obj = Machine()
        test_obj.rotor = LamSlotWind(
            Rint=0.2,
            Rext=0.5,
            is_internal=True,
            is_stator=False,
            L1=0.95,
            Nrvd=1,
            Wrvd=0.05,
        )
        test_obj.rotor.slot = SlotW10(
            Zs=6,
            W0=50e-3,
            W1=90e-3,
            W2=100e-3,
            H0=20e-3,
            H1=35e-3,
            H2=130e-3,
            H1_is_rad=False,
        )
        test_obj.rotor.winding = WindingUD(
            user_wind_mat=wind_mat, qs=4, p=4, Lewout=60e-3
        )
        test_obj.shaft = Shaft(Drsh=test_obj.rotor.Rint * 2, Lshaft=1)

        test_obj.stator = LamSlotWind(
            Rint=0.51,
            Rext=0.8,
            is_internal=False,
            is_stator=True,
            L1=0.95,
            Nrvd=1,
            Wrvd=0.05,
        )
        test_obj.stator.slot = SlotW10(
            Zs=6,
            W0=50e-3,
            W1=80e-3,
            W2=50e-3,
            H0=15e-3,
            H1=25e-3,
            H2=140e-3,
            H1_is_rad=False,
        )
        test_obj.stator.winding = WindingUD(
            user_wind_mat=wind_mat, qs=4, p=4, Lewout=60e-3
        )

        test_obj.frame = Frame(Rint=0.8, Rext=0.9, Lfra=1)
        test_obj.frame.mat_type.name = "M330_35A"

        test_obj.plot()
        fig = plt.gcf()
        fig.savefig(join(save_path, "test_Lam_Wind_s10_1-Machine.png"))
        # Rotor + Stator + 2 for frame + 1 for Shaft
        self.assertEqual(len(fig.axes[0].patches), 55)

        test_obj.rotor.plot()
        fig = plt.gcf()
        self.assertEqual(len(fig.axes[0].patches), 26)
        fig.savefig(join(save_path, "test_Lam_Wind_s10_2-Rotor.png"))
        # 2 for lam + Zs*4 for wind
        self.assertEqual(len(fig.axes[0].patches), 26)

        test_obj.stator.plot()
        fig = plt.gcf()
        fig.savefig(join(save_path, "test_Lam_Wind_s10_3-Stator.png"))
        # 2 for lam + Zs*4 for wind
        self.assertEqual(len(fig.axes[0].patches), 26)

        lines = test_obj.stator.slot.build_geometry_half_tooth(is_top=False)
        surf = SurfLine(line_list=lines)
        surf.plot_lines()
        fig = plt.gcf()
        fig.savefig(join(save_path, "test_Lam_Wind_s10_Tooth_bottom_out.png"))

        lines = test_obj.stator.slot.build_geometry_half_tooth(is_top=True)
        surf = SurfLine(line_list=lines)
        surf.plot_lines()
        fig = plt.gcf()
        fig.savefig(join(save_path, "test_Lam_Wind_s10_Tooth_top_out.png"))

        lines = test_obj.rotor.slot.build_geometry_half_tooth(is_top=False)
        surf = SurfLine(line_list=lines)
        surf.plot_lines()
        fig = plt.gcf()
        fig.savefig(join(save_path, "test_Lam_Wind_s10_Tooth_bottom_in.png"))

        lines = test_obj.rotor.slot.build_geometry_half_tooth(is_top=True)
        surf = SurfLine(line_list=lines)
        surf.plot_lines()
        fig = plt.gcf()
        fig.savefig(join(save_path, "test_Lam_Wind_s10_Tooth_top_in.png"))

        tooth = test_obj.rotor.slot.get_surface_tooth()
        tooth.plot(color="r")
        fig = plt.gcf()
        fig.savefig(join(save_path, "test_Lam_Wind_s10_Tooth_in.png"))

        tooth = test_obj.stator.slot.get_surface_tooth()
        tooth.plot(color="r")
        fig = plt.gcf()
        mesh_dict = tooth.comp_mesh_dict(5e-3)
        for line in tooth.get_lines():
            mid = line.get_middle()
            plt.text(mid.real, mid.imag, str(mesh_dict[line.label]))
        fig.savefig(join(save_path, "test_Lam_Wind_s10_Tooth_out.png"))
Пример #12
0
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

    """

    # getting Number of Slot
    Zs = self.slot.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 = "In"  # label for the yoke
    else:
        ls = "In"
        ly = "Ext"

    Ryoke = self.get_Ryoke()
    slot_pitch = 2 * pi / Zs
    op_angle = self.slot.comp_angle_opening()
    t_angle = slot_pitch - op_angle
    H_yoke = self.comp_height_yoke()

    # getting the Lines that delimit one slot
    Slot_lines = self.slot.build_geometry()
    for line in Slot_lines:
        line.rotate(slot_pitch / 2)
    # getting the bore line
    bore_lines = self.get_bore_line(slot_pitch - t_angle / 2,
                                    slot_pitch + t_angle / 2)
    Slot_lines.extend(bore_lines)

    # Generate all the Bore lines
    line_list = list()
    for ii in range(Zs // sym):
        # Duplicate and rotate the slot + bore for each slot
        for line in Slot_lines:
            new_line = type(line)(init_dict=line.as_dict())
            new_line.rotate(ii * slot_pitch)
            line_list.append(new_line)

    # Create the lamination surface(s)
    surf_list = list()
    if sym == 1:  # Complete lamination
        # Create Slot surface
        surf_slot = SurfLine(line_list=line_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
        # Modify the bore radius
        if len(bore_lines) > 0:
            line_list.pop(-1)
            start_angle = angle(line_list[-1].get_end())
            line_list.extend(
                self.get_bore_line(start_angle,
                                   start_angle + t_angle / 2,
                                   label="Bore_line"))
            line_list.insert(
                0,
                self.get_bore_line(0, t_angle / 2, label="Bore_line")[0])
        # Add the Yoke part
        Zy1 = Ryoke
        Zy2 = Ryoke * exp(1j * 2 * pi / sym)
        line_list.append(
            Segment(line_list[-1].get_end(), Zy2, label=ll + "_Yoke_side"))
        if Ryoke > 0:  # For internal lamination
            line_list.append(Arc1(Zy2, Zy1, -Ryoke, ll + "_Yoke_Radius"))
        line_list.append(
            Segment(Zy1, line_list[0].get_begin(), label=ll + "_Yoke_side"))
        # 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=line_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
Пример #13
0
def build_geometry_wind(self,
                        Nrad,
                        Ntan,
                        is_simplified=False,
                        alpha=0,
                        delta=0):
    """Split the slot winding area in several zone

    Parameters
    ----------
    self : SlotW61
        A SlotW61 object
    Nrad : int
        Number of radial layer
    Ntan : int
        Number of tangentiel layer
    is_simplified : bool
        boolean to specify if the 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

    """

    if Nrad != 1 or Ntan != 2:
        raise S61_WindError("Slot 61 can use only for winding with Nrad=1 " +
                            "and Ntan 2")
    self.check()

    # check if the slot is on the stator for the label
    if self.get_is_stator():
        st = "S"
    else:
        st = "R"

    [Z1, Z2, Z3, Z4, Z5, Z6, Z7, Z8, Z9, Z10] = self._comp_point_coordinate()

    # Compute the point in the tooth ref
    hsp = pi / self.Zs
    Z4t = Z4 * exp(1j * hsp)
    Z5t = Z5 * exp(1j * hsp)
    Zw1t = Z4t - self.H3
    Zw2t = Z5t + self.H4
    Zw3t = Zw2t + 1j * ((self.W1 - self.W2) / 2 - self.W3)
    Zw4t = Zw1t + 1j * ((self.W1 - self.W2) / 2 - self.W3)

    # Go back to slot ref
    Zw1 = Zw1t * exp(1j * -hsp)
    Zw2 = Zw2t * exp(1j * -hsp)
    Zw3 = Zw3t * exp(1j * -hsp)
    Zw4 = Zw4t * exp(1j * -hsp)
    Zw1s = Zw1.conjugate()
    Zw2s = Zw2.conjugate()
    Zw3s = Zw3.conjugate()
    Zw4s = Zw4.conjugate()
    Ref1 = (Zw1 + Zw2 + Zw3 + Zw4) / 4
    Ref2 = (Zw1s + Zw2s + Zw3s + Zw4s) / 4

    # Create the surfaces
    surf_list = list()
    wind1 = [Segment(Zw3, Zw4)]
    wind2 = [Segment(Zw3s, Zw4s)]
    if (is_simplified and self.W3 > 0) or not is_simplified:
        wind1.append(Segment(Zw4, Zw1))
        wind2.append(Segment(Zw4s, Zw1s))
    if not is_simplified:
        wind1.append(Segment(Zw1, Zw2))
        wind2.append(Segment(Zw1s, Zw2s))
    if (is_simplified and self.W4 > 0) or not is_simplified:
        wind1.append(Segment(Zw2, Zw3))
        wind2.append(Segment(Zw2s, Zw3s))

    surf_list.append(
        SurfLine(line_list=wind1,
                 label="Wind" + st + "_R0_T0_S0",
                 point_ref=Ref1))
    surf_list.append(
        SurfLine(line_list=wind2,
                 label="Wind" + st + "_R0_T1_S0",
                 point_ref=Ref2))

    # Rotate and translate the surfaces
    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)

    return surf_list
Пример #14
0
def build_geometry(self, alpha=0, delta=0, is_simplified=False):
    """Compute the curve (Line) needed to plot the Hole.
    The ending point of a curve is the starting point of the next curve in
    the list

    Parameters
    ----------
    self : HoleM51
        A HoleM51 object
    alpha : float
        Angle to rotate the hole (Default value = 0) [rad]
    delta : complex
        Complex to translate the hole (Default value = 0)
    is_simplified : bool
       True to avoid line superposition

    Returns
    -------
    surf_list: list
        List of SurfLine needed to draw the HoleM51

    """
    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"
    Rbo = self.get_Rbo()

    # comp point coordinate (in complex)
    alpha = self.comp_alpha()

    Wslot = 2 * sin(self.W1 / 2) * (Rbo - self.H1)
    L = 0.5 * (Wslot - self.W0) / cos(alpha)  # ||P2,P5||

    # Center of the hole
    Z0 = Rbo - self.H0
    Z2 = Z0 + 1j * self.W0 / 2
    Z25 = Z0 - 1j * self.W0 / 2
    Z15 = Z25 - self.H2
    Z1 = Z2 - 1j * self.W2
    Z26 = Z1 - 1j * self.W3
    Z12 = Z2 - self.H2
    Z13 = Z12 - 1j * self.W2
    Z14 = Z13 - 1j * self.W3
    Z11 = Z12 + 1j * tan(alpha / 2) * self.H2
    Z16 = Z15 - 1j * tan(alpha / 2) * self.H2

    # Draw the left side with center P2, and X axis =(P2,P5), Y axis=(P2,P10)
    Z3 = self.W4 * exp(1j * (pi / 2 - alpha)) + Z2
    Z4 = (self.W4 + self.W5) * exp(1j * (pi / 2 - alpha)) + Z2
    Z5 = (Rbo - self.H1) * exp(1j * self.W1 / 2)
    Z10 = (1j * self.H2) * exp(1j * (pi / 2 - alpha)) + Z2
    Z9 = (1j * self.H2 + self.W4) * exp(1j * (pi / 2 - alpha)) + Z2
    Z8 = (1j * self.H2 + self.W4 + self.W5) * exp(1j * (pi / 2 - alpha)) + Z2
    Z7 = (1j * self.H2 + L) * exp(1j * (pi / 2 - alpha)) + Z2

    # Draw the right side with center P25, X axis (P25,P23), Y axis(P25,P17)
    Z24 = self.W6 * exp(-1j * (pi / 2 - alpha)) + Z25
    Z23 = (self.W6 + self.W7) * exp(-1j * (pi / 2 - alpha)) + Z25
    Z22 = (Rbo - self.H1) * exp(-1j * self.W1 / 2)
    Z17 = (1j * self.H2) * exp(-1j * (pi / 2 - alpha)) + Z25
    Z18 = (-1j * self.H2 + self.W6) * exp(-1j * (pi / 2 - alpha)) + Z25
    Z19 = (-1j * self.H2 + self.W6 + self.W7) * exp(-1j * (pi / 2 - alpha)) + Z25
    Z20 = (-1j * self.H2 + L) * exp(-1j * (pi / 2 - alpha)) + Z25

    # Z6 is the intersection of the line [Z7,Z10] and Circle centre
    # (0,0) radius Rbo - H1
    Zint = inter_line_circle(Z7, Z10, Rbo - self.H1)

    # Select the point with Re(Z) > 0
    if Zint[0].real > 0:
        Z6 = Zint[0]
    else:
        Z6 = Zint[1]
    Z21 = Z6.conjugate()

    surf_list = list()
    # Create all the surfaces for all the cases
    # Air surface bore around magnet_0
    curve_list = list()
    curve_list.append(Arc1(Z21, Z22, Rbo - self.H1))
    curve_list.append(Segment(Z22, Z23))
    curve_list.append(Segment(Z23, Z19))
    curve_list.append(Segment(Z19, Z21))
    point_ref = (Z21 + Z22 + Z23 + Z19) / 4
    S1 = SurfLine(line_list=curve_list, label="Air", point_ref=point_ref)

    # Surface for magnet_0
    curve_list = list()
    if is_simplified:
        curve_list.append(Segment(Z24, Z18))
        curve_list.append(Segment(Z19, Z23))
    else:
        curve_list.append(Segment(Z24, Z18))
        curve_list.append(Segment(Z18, Z19))
        curve_list.append(Segment(Z19, Z23))
        curve_list.append(Segment(Z23, Z24))
    point_ref = (Z24 + Z18 + Z19 + Z23) / 4
    S2 = SurfLine(
        line_list=curve_list, label="Magnet" + st + "_N_R0_T0_S0", point_ref=point_ref
    )

    # Air surface between magnet_0 and magnet_1
    curve_list = list()
    curve_list.append(Segment(Z24, Z25))
    curve_list.append(Segment(Z25, Z26))
    curve_list.append(Segment(Z26, Z14))
    curve_list.append(Segment(Z14, Z16))
    curve_list.append(Segment(Z16, Z18))
    curve_list.append(Segment(Z18, Z24))
    point_ref = (Z25 + Z16) / 2
    S3 = SurfLine(line_list=curve_list, label="Air", point_ref=point_ref)

    # Surface for magnet_1
    curve_list = list()
    if is_simplified:
        curve_list.append(Segment(Z1, Z13))
        curve_list.append(Segment(Z14, Z26))
    else:
        curve_list.append(Segment(Z26, Z1))
        curve_list.append(Segment(Z1, Z13))
        curve_list.append(Segment(Z13, Z14))
        curve_list.append(Segment(Z14, Z26))
    point_ref = (Z26 + Z1 + Z13 + Z14) / 4
    S4 = SurfLine(
        line_list=curve_list, label="Magnet" + st + "_N_R0_T1_S0", point_ref=point_ref
    )

    # Air surface between magnet_1 and magnet_2
    curve_list = list()
    curve_list.append(Segment(Z1, Z2))
    curve_list.append(Segment(Z2, Z3))
    curve_list.append(Segment(Z3, Z9))
    curve_list.append(Segment(Z9, Z11))
    curve_list.append(Segment(Z11, Z13))
    curve_list.append(Segment(Z13, Z1))
    point_ref = (Z11 + Z2) / 2
    S5 = SurfLine(line_list=curve_list, label="Air", point_ref=point_ref)

    # Surface for magnet_2
    curve_list = list()
    if is_simplified:
        curve_list.append(Segment(Z4, Z8))
        curve_list.append(Segment(Z9, Z3))
    else:
        curve_list.append(Segment(Z4, Z8))
        curve_list.append(Segment(Z8, Z9))
        curve_list.append(Segment(Z9, Z3))
        curve_list.append(Segment(Z3, Z4))
    point_ref = (Z4 + Z8 + Z9 + Z3) / 4
    S6 = SurfLine(
        line_list=curve_list, label="Magnet" + st + "_N_R0_T2_S0", point_ref=point_ref
    )

    # Air surface bore around magnet_2
    curve_list = list()
    curve_list.append(Arc1(Z5, Z6, Rbo - self.H1))
    curve_list.append(Segment(Z6, Z8))
    curve_list.append(Segment(Z8, Z4))
    curve_list.append(Segment(Z4, Z5))
    point_ref = (Z4 + Z5 + Z6 + Z8) / 4
    S7 = SurfLine(line_list=curve_list, label="Air", point_ref=point_ref)

    # Air surface bore around magnet_2 (no magnet_2 and magnet_1)
    curve_list = list()
    curve_list.append(Arc1(Z5, Z6, Rbo - self.H1))
    curve_list.append(Segment(Z6, Z11))
    curve_list.append(Segment(Z11, Z13))
    curve_list.append(Segment(Z13, Z1))
    curve_list.append(Segment(Z1, Z2))
    curve_list.append(Segment(Z2, Z5))
    point_ref = (Z2 + Z11) / 2
    S8 = SurfLine(line_list=curve_list, label="Air", point_ref=point_ref)

    # Air surface bore around magnet_0 (no magnet_0 and magnet_1)
    curve_list = list()
    curve_list.append(Arc1(Z21, Z22, Rbo - self.H1))
    curve_list.append(Segment(Z22, Z25))
    curve_list.append(Segment(Z25, Z26))
    curve_list.append(Segment(Z26, Z14))
    curve_list.append(Segment(Z14, Z16))
    curve_list.append(Segment(Z16, Z21))
    point_ref = (Z25 + Z16) / 2
    S9 = SurfLine(line_list=curve_list, label="Air", point_ref=point_ref)

    # Air surface bore around magnet_1 (no magnet_1 and magnet_0 and magnet_2)
    curve_list = list()
    curve_list.append(Segment(Z24, Z25))
    curve_list.append(Segment(Z25, Z2))
    curve_list.append(Segment(Z2, Z3))
    curve_list.append(Segment(Z3, Z9))
    curve_list.append(Segment(Z9, Z11))
    curve_list.append(Segment(Z11, Z16))
    curve_list.append(Segment(Z16, Z18))
    curve_list.append(Segment(Z18, Z24))
    point_ref = (Z1 + Z13) / 2
    S10 = SurfLine(line_list=curve_list, label="Air", point_ref=point_ref)

    # Air surface bore around magnet_1 (no magnet_1 and no magnet_0 and magnet_2)
    curve_list = list()
    curve_list.append(Arc1(Z21, Z22, Rbo - self.H1))
    curve_list.append(Segment(Z22, Z25))
    curve_list.append(Segment(Z25, Z2))
    curve_list.append(Segment(Z2, Z3))
    curve_list.append(Segment(Z3, Z9))
    curve_list.append(Segment(Z9, Z11))
    curve_list.append(Segment(Z11, Z16))
    curve_list.append(Segment(Z16, Z21))
    point_ref = (Z1 + Z13) / 2
    S11 = SurfLine(line_list=curve_list, label="Air", point_ref=point_ref)

    # Air surface bore around magnet_1 (no magnet_1 and magnet_0 and no magnet_2)
    curve_list = list()
    curve_list.append(Arc1(Z5, Z6, Rbo - self.H1))
    curve_list.append(Segment(Z6, Z11))
    curve_list.append(Segment(Z11, Z16))
    curve_list.append(Segment(Z16, Z18))
    curve_list.append(Segment(Z18, Z24))
    curve_list.append(Segment(Z24, Z25))
    curve_list.append(Segment(Z25, Z2))
    curve_list.append(Segment(Z2, Z5))
    point_ref = (Z1 + Z13) / 2
    S12 = SurfLine(line_list=curve_list, label="Air", point_ref=point_ref)

    # Air surface No magnet
    curve_list = list()
    curve_list.append(Arc1(Z5, Z6, Rbo - self.H1))
    curve_list.append(Segment(Z6, Z11))
    curve_list.append(Segment(Z11, Z16))
    curve_list.append(Segment(Z16, Z21))
    curve_list.append(Arc1(Z21, Z22, Rbo - self.H1))
    curve_list.append(Segment(Z22, Z25))
    curve_list.append(Segment(Z25, Z2))
    curve_list.append(Segment(Z2, Z5))
    point_ref = (Z1 + Z13) / 2
    S13 = SurfLine(line_list=curve_list, label="Air", point_ref=point_ref)

    # Create the surface list by selecting the correct ones
    if self.magnet_0 and self.magnet_1 and self.magnet_2:
        surf_list = [S1, S2, S3, S4, S5, S6, S7]
    elif not self.magnet_0 and self.magnet_1 and self.magnet_2:
        surf_list = [S9, S4, S5, S6, S7]
    elif self.magnet_0 and not self.magnet_1 and self.magnet_2:
        surf_list = [S1, S2, S10, S6, S7]
    elif not self.magnet_0 and not self.magnet_1 and self.magnet_2:
        surf_list = [S11, S6, S7]
    elif self.magnet_0 and self.magnet_1 and not self.magnet_2:
        surf_list = [S1, S2, S3, S4, S8]
    elif not self.magnet_0 and self.magnet_1 and not self.magnet_2:
        surf_list = [S9, S4, S8]
    elif self.magnet_0 and not self.magnet_1 and not self.magnet_2:
        surf_list = [S1, S2, S12]
    elif not self.magnet_0 and not self.magnet_1 and not self.magnet_2:
        surf_list = [S13]

    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)

    return surf_list
Пример #15
0
def build_geometry_wind(self, Nrad, Ntan, is_simplified=False, alpha=0, delta=0):
    """Split the slot winding area in several zone

    Parameters
    ----------
    self : SlotW13
        A SlotW13 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

    """
    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"
    [Z10, Z9, Z8, Z7, Z6, Z5, Z4, Z3, Z2, Z1] = self._comp_point_coordinate()

    X = linspace(Z7, Z6, 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] == Z7
    assert Z[Nrad][0] == Z6
    assert Z[0][Ntan] == Z4
    assert Z[Nrad][Ntan] == Z5

    # We go thought the surface 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
            point_ref = (
                Z[ii][jj] + Z[ii][jj + 1] + Z[ii + 1][jj + 1] + Z[ii + 1][jj]
            ) / 4  # tre reference point of the surface
            # With one zone the order would be [Z7,Z4,Z5,Z6]
            if is_simplified:  # No doubling Line allowed
                curve_list = list()
                if ii == 0:
                    curve_list.append(Segment(Z[ii][jj], Z[ii][jj + 1]))
                if jj != Ntan - 1:
                    curve_list.append(Segment(Z[ii][jj + 1], Z[ii + 1][jj + 1]))
                if ii != Nrad - 1:
                    curve_list.append(Segment(Z[ii + 1][jj + 1], Z[ii + 1][jj]))
                surface = SurfLine(
                    line_list=curve_list,
                    label="Wind" + st + "_R" + str(ii) + "_T" + str(jj) + "_S0",
                    point_ref=point_ref,
                )  # surface in the winding area
                surf_list.append(surface)
            else:
                curve_list = list()
                curve_list.append(Segment(Z[ii][jj], Z[ii][jj + 1]))
                curve_list.append(Segment(Z[ii][jj + 1], Z[ii + 1][jj + 1]))
                curve_list.append(Segment(Z[ii + 1][jj + 1], Z[ii + 1][jj]))
                curve_list.append(Segment(Z[ii + 1][jj], Z[ii][jj]))
                surface = SurfLine(
                    line_list=curve_list,
                    label="Wind" + st + "_R" + str(ii) + "_T" + str(jj) + "_S0",
                    point_ref=point_ref,
                )  # surface in the winding area
                surf_list.append(surface)

    for surf in surf_list:
        surf.rotate(alpha)  # rotation of each surface
        surf.translate(delta)  # translation of each surface

    return surf_list
Пример #16
0
def build_geometry(self, sym=1, alpha=0, delta=0):
    """Build the geometry of the Frame

    Parameters
    ----------
    self : Frame
        Frame 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 surface

    """
    surf_list = list()
    # If there is a frame...
    if self.comp_height_eq() != 0:
        if sym == 1:  # No symmetry / full frame
            surf_frame = Circle(
                radius=self.Rext,
                label="Frame",
                center=0,
                point_ref=self.Rint + (self.Rext - self.Rint) / 2,
            )

            surface = Circle(radius=self.Rint,
                             label=None,
                             center=0,
                             point_ref=0)
            surf_list.append(surf_frame)
            surf_list.append(surface)

        else:  # Part of the frame
            Z0 = self.Rint
            Z3 = Z0 * exp(1j * 2 * pi / sym)
            Z1 = self.Rext
            Z2 = Z1 * exp(1j * 2 * pi / sym)
            curve_list = list()
            curve_list.append(Segment(Z0, Z1))
            curve_list.append(Arc1(Z1, Z2, self.Rext))
            curve_list.append(Segment(Z2, Z3))
            curve_list.append(Arc1(Z3, Z0, -self.Rint))
            surf_frame = SurfLine(
                line_list=curve_list,
                label="Frame",
                point_ref=self.Rint + (self.Rext - self.Rint) / 2,
            )
            surf_list.append(surf_frame)

        # Apply the transformations
        for surf in surf_list:
            surf.rotate(alpha)
            surf.translate(delta)

    return surf_list
Пример #17
0
def build_geometry_wind(self,
                        Nrad,
                        Ntan,
                        is_simplified=False,
                        alpha=0,
                        delta=0):
    """Split the slot winding area in several zone

    Parameters
    ----------
    self : SlotW12
        A SlotW12 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

    """
    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"
    Rbo = self.get_Rbo()

    # angle is the angle to rotate Z0 so ||Z1,Z8|| = 2*R2
    angle = float(arcsin(self.R2 / Rbo))

    # comp point coordinate (in complex)
    Z1 = Rbo * exp(1j * angle)

    if self.is_outwards():
        Z3 = Z1 + self.H0 + self.R1 * 2
        Z4 = Z3 + self.H1
        Zrad1 = Z3.conjugate() + (self.H1 + self.R2) / 2.0
        Ztan2 = Z4.real + self.R2
        rot_sign = False
    else:  # inward slot
        Z3 = Z1 - self.H0 - self.R1 * 2
        Z4 = Z3 - self.H1
        Zrad1 = Z3.conjugate() - (self.H1 + self.R2) / 2.0
        Ztan2 = Z4.real - self.R2
        rot_sign = True

    # symetry
    Z5 = Z4.conjugate()
    Z6 = Z3.conjugate()
    Zrad2 = Zrad1.conjugate()
    Ztan1 = Z3.real
    Zmid = (Ztan1 + Ztan2) / 2.0

    surf_list = list()
    if (Nrad == 2 and Ntan == 1) and self.H1 > self.R2:
        if is_simplified:  # no coincident lines allowed
            # Part 1 (0,0)
            line1 = Segment(Z6, Z3)
            line2 = Segment(Zrad2, Zrad1)
            point_ref = (Z6 + Z3 + Zrad2 + Zrad1) / 4
            surface = SurfLine(
                line_list=[line1, line2],
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)

            # Part2 (1,0)
            point_ref = (Z6 + Z3 + Zrad2 + Zrad1) / 4
            surface = SurfLine(line_list=[],
                               label="Wind" + st + "_R1_T0_S0",
                               point_ref=point_ref)
            surf_list.append(surface)
        else:
            # Part 1 (0,0)
            line1 = Segment(Z6, Z3)
            line2 = Segment(Z3, Zrad2)
            line3 = Segment(Zrad2, Zrad1)
            line4 = Segment(Zrad1, Z6)
            point_ref = (Z6 + Z3 + Zrad2 + Zrad1) / 4
            surface = SurfLine(
                line_list=[line1, line2, line3, line4],
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)

            # Part2 (1,0)
            line1 = Segment(Zrad1, Zrad2)
            line2 = Segment(Zrad2, Z4)
            line3 = Arc3(Z4, Z5, rot_sign)
            line4 = Segment(Z5, Zrad1)
            point_ref = (Z4 + Z5 + Zrad2 + Zrad1) / 4
            surface = SurfLine(
                line_list=[line1, line2, line3, line4],
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
    elif Nrad == 1 and Ntan == 2:
        if is_simplified:  # no coincident lines allowed
            # Part 1 (0,0)
            line1 = Segment(Z6, Ztan1)
            point_ref = (Z6 + Ztan1 + Ztan2 + Z5) / 4
            surface = SurfLine(line_list=[line1],
                               label="Wind" + st + "_R0_T0_S0",
                               point_ref=point_ref)
            surf_list.append(surface)
            # Part2 (0,1)

            line1 = Segment(Ztan1, Z3)
            point_ref = (Ztan1 + Z3 + Z4 + Ztan2) / 4
            surface = SurfLine(line_list=[line1],
                               label="Wind" + st + "_R0_T1_S0",
                               point_ref=point_ref)
            surf_list.append(surface)
        else:
            # Part 1 (0,0)

            line1 = Segment(Z6, Ztan1)
            line2 = Segment(Ztan1, Ztan2)
            line3 = Arc1(Ztan2, Z5, self.R2)
            line4 = Segment(Z5, Z6)
            point_ref = (Z6 + Ztan1 + Ztan2 + Z5) / 4
            surface = SurfLine(
                line_list=[line1, line2, line3, line4],
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (0,1)

            line1 = Segment(Ztan1, Z3)
            line2 = Segment(Z3, Z4)
            line3 = Arc1(Z4, Ztan2, self.R2)
            line4 = Segment(Ztan2, Ztan1)
            point_ref = (Ztan1 + Z3 + Z4 + Ztan2) / 4
            surface = SurfLine(
                line_list=[line1, line2, line3, line4],
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
    elif Nrad == 2 and Ntan == 2 and self.H1 > self.R2:
        if is_simplified:  # no coincident lines allowed
            # Part 1 (0,0)
            line1 = Segment(Z6, Ztan1)
            line2 = Segment(Ztan1, Zmid)
            line3 = Segment(Zmid, Zrad1)
            point_ref = (Z6 + Ztan1 + Zmid + Zrad1) / 4
            surface = SurfLine(
                line_list=[line1, line2, line3],
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)

            line1 = Segment(Zmid, Ztan2)
            point_ref = (Zrad1 + Zmid + Ztan2 + Z5) / 4
            surface = SurfLine(line_list=[line1],
                               label="Wind" + st + "_R1_T0_S0",
                               point_ref=point_ref)
            surf_list.append(surface)
            # Part 3 (0,1)

            line1 = Segment(Ztan1, Z3)
            line2 = Segment(Zrad2, Zmid)
            point_ref = (Ztan1 + Z3 + Zrad2 + Zmid) / 4
            surface = SurfLine(
                line_list=[line1, line2],
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part4 (1,1)
            point_ref = (Zmid + Zrad2 + Z4 + Ztan2) / 4
            surface = SurfLine(line_list=[],
                               label="Wind" + st + "_R1_T1_S0",
                               point_ref=point_ref)
            surf_list.append(surface)
        else:
            # Part 1 (0,0)

            line1 = Segment(Z6, Ztan1)
            line2 = Segment(Ztan1, Zmid)
            line3 = Segment(Zmid, Zrad1)
            line4 = Segment(Zrad1, Z6)
            point_ref = (Z6 + Ztan1 + Zmid + Zrad1) / 4
            surface = SurfLine(
                line_list=[line1, line2, line3, line4],
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)

            line1 = Segment(Zrad1, Zmid)
            line2 = Segment(Zmid, Ztan2)
            line3 = Arc1(Ztan2, Z5, self.R2)
            line4 = Segment(Z5, Zrad1)
            point_ref = (Zrad1 + Zmid + Ztan2 + Z5) / 4
            surface = SurfLine(
                line_list=[line1, line2, line3, line4],
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part 3 (0,1)

            line1 = Segment(Ztan1, Z3)
            line2 = Segment(Z3, Zrad2)
            line3 = Segment(Zrad2, Zmid)
            line4 = Segment(Zmid, Ztan1)
            point_ref = (Ztan1 + Z3 + Zrad2 + Zmid) / 4
            surface = SurfLine(
                line_list=[line1, line2, line3, line4],
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part4 (1,1)

            line1 = Segment(Zmid, Zrad2)
            line2 = Segment(Zrad2, Z4)
            line3 = Arc1(Z4, Ztan2, self.R2)
            line4 = Segment(Ztan2, Zmid)
            point_ref = (Zmid + Zrad2 + Z4 + Ztan2) / 4
            surface = SurfLine(
                line_list=[line1, line2, line3, line4],
                label="Wind" + st + "_R1_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
    else:  # Default only one zone
        # Creation of curve
        line_list = list()
        line_list.append(Segment(Z6, Z3))
        if self.H1 > 0:
            line_list.append(Segment(Z3, Z4))
        line_list.append(Arc3(Z4, Z5, rot_sign))
        if self.H1 > 0:
            line_list.append(Segment(Z5, Z6))

        surface = SurfLine(line_list=line_list,
                           label="Wind" + st + "_R0_T0_S0",
                           point_ref=Zmid)
        surf_list.append(surface)

    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)
    return surf_list
Пример #18
0
def build_geometry_wind(self,
                        Nrad,
                        Ntan,
                        is_simplified=False,
                        alpha=0,
                        delta=0):
    """Split the slot winding area in several zone

    Parameters
    ----------
    self : SlotW11
        A SlotW11 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
        number for rotation (Default value = 0) [rad]
    delta : complex
        complex number for translation (Default value = 0)

    Returns
    -------
    surf_list: list
        List of surface delimiting the winding zone

    """

    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"

    [Z10, Z9, Z8, Z7, Z6, Z5, Z4, Z3, Z2, Z1,
     rot_sign] = self._comp_point_coordinate()
    rot_sign = -rot_sign
    Ztan1 = (Z3 + Z8) / 2.0
    Ztan2 = (Z5 + Z6) / 2.0

    if self.H2 / 2.0 > self.R1:  # Zrad1 between Z8 and Z7
        Zmid = (Ztan1 + Ztan2) / 2.0
        x = fsolve(
            lambda x: angle((Z7 - (Zmid + 1j * x)) / (Z7 - Z8)),
            -(self.W2 + self.W1) / 4.0,
        )
        Zrad1 = Zmid + 1j * x[0]
        Zrad2 = Zrad1.conjugate()

    surf_list = list()
    if Nrad == 1 and Ntan == 2:
        if is_simplified:  # no coincident lines allowed
            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Z8, Ztan1))
            curve_list.append(Segment(Ztan1, Ztan2))
            point_ref = (Z8 + Ztan1 + Ztan2 + Z6 + Z7) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (0,1)
            curve_list = list()
            curve_list.append(Segment(Ztan1, Z3))
            point_ref = (Ztan1 + Z3 + Z4 + Z5 + Ztan2) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
        else:

            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Z8, Ztan1))
            curve_list.append(Segment(Ztan1, Ztan2))
            if self.W2 > 2 * self.R1:
                curve_list.append(Segment(Ztan2, Z6))
            curve_list.append(Arc1(Z6, Z7, rot_sign * self.R1))
            curve_list.append(Segment(Z7, Z8))
            point_ref = (Z8 + Ztan1 + Ztan2 + Z6 + Z7) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (0,1)
            curve_list = list()
            curve_list.append(Segment(Ztan1, Z3))
            curve_list.append(Segment(Z3, Z4))
            curve_list.append(Arc1(Z4, Z5, rot_sign * self.R1))
            if self.W2 > 2 * self.R1:
                curve_list.append(Segment(Z5, Ztan2))
            curve_list.append(Segment(Ztan2, Ztan1))
            point_ref = (Ztan1 + Z3 + Z4 + Z5 + Ztan2) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
    elif Nrad == 2 and Ntan == 1 and self.H2 / 2.0 > self.R1:
        if is_simplified:  # no coincident lines allowed
            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Z8, Z3))
            curve_list.append(Segment(Zrad2, Zrad1))
            point_ref = (Z8 + Z3 + Zrad2 + Zrad1) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)
            curve_list = list()
            point_ref = (Zrad2 + Zrad1 + Z4 + Z5 + Z6 + Z7) / 6
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
        else:

            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Z8, Z3))
            curve_list.append(Segment(Z3, Zrad2))
            curve_list.append(Segment(Zrad2, Zrad1))
            curve_list.append(Segment(Zrad1, Z8))
            point_ref = (Z8 + Z3 + Zrad2 + Zrad1) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)
            curve_list = list()
            curve_list.append(Segment(Zrad1, Zrad2))
            curve_list.append(Segment(Zrad2, Z4))
            curve_list.append(Arc1(Z4, Z5, rot_sign * self.R1))
            if self.W2 > 2 * self.R1:
                curve_list.append(Segment(Z5, Z6))
            curve_list.append(Arc1(Z6, Z7, rot_sign * self.R1))
            curve_list.append(Segment(Z7, Zrad1))
            point_ref = (Zrad2 + Zrad1 + Z4 + Z5 + Z6 + Z7) / 6
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
    elif Nrad == 2 and Ntan == 2 and self.H2 / 2.0 > self.R1:
        if is_simplified:  # no coincident lines allowed
            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Z8, Ztan1))
            curve_list.append(Segment(Ztan1, Zmid))
            curve_list.append(Segment(Zmid, Zrad1))
            point_ref = (Z8 + Ztan1 + Zmid + Zrad1) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)
            curve_list = list()
            curve_list.append(Segment(Zmid, Ztan2))
            point_ref = (Zrad1 + Zmid + Ztan2 + Z6 + Z7) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part3 (0,1)
            curve_list = list()
            curve_list.append(Segment(Ztan1, Z3))
            curve_list.append(Segment(Zrad2, Zmid))
            point_ref = (Ztan1 + Z3 + Zrad2 + Zmid) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part4 (1,1)
            curve_list = list()
            point_ref = (Zmid + Zrad2 + Z4 + Z5 + Ztan2) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
        else:

            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Z8, Ztan1))
            curve_list.append(Segment(Ztan1, Zmid))
            curve_list.append(Segment(Zmid, Zrad1))
            curve_list.append(Segment(Zrad1, Z8))
            point_ref = (Z8 + Ztan1 + Zmid + Zrad1) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)
            curve_list = list()
            curve_list.append(Segment(Zrad1, Zmid))
            curve_list.append(Segment(Zmid, Ztan2))
            if self.W2 > 2 * self.R1:
                curve_list.append(Segment(Ztan2, Z6))
            curve_list.append(Arc1(Z6, Z7, rot_sign * self.R1))
            curve_list.append(Segment(Z7, Zrad1))
            point_ref = (Zrad1 + Zmid + Ztan2 + Z6 + Z7) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part3 (0,1)
            curve_list = list()
            curve_list.append(Segment(Ztan1, Z3))
            curve_list.append(Segment(Z3, Zrad2))
            curve_list.append(Segment(Zrad2, Zmid))
            curve_list.append(Segment(Zmid, Ztan1))
            point_ref = (Ztan1 + Z3 + Zrad2 + Zmid) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part4 (1,1)
            curve_list = list()
            curve_list.append(Segment(Zmid, Zrad2))
            curve_list.append(Segment(Zrad2, Z4))
            curve_list.append(Arc1(Z4, Z5, rot_sign * self.R1))
            if self.W2 > 2 * self.R1:
                curve_list.append(Segment(Z5, Ztan2))
            curve_list.append(Segment(Ztan2, Zmid))
            point_ref = (Zmid + Zrad2 + Z4 + Z5 + Ztan2) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
    else:
        # Creation of curve
        curve_list = list()
        curve_list.append(Segment(Z8, Z3))
        curve_list.append(Segment(Z3, Z4))
        if self.R1 * 2 < self.W2:
            curve_list.append(Arc1(Z4, Z5, rot_sign * self.R1))
            curve_list.append(Segment(Z5, Z6))
            curve_list.append(Arc1(Z6, Z7, rot_sign * self.R1))
        else:  # Z5 == Z6
            curve_list.append(Arc3(Z4, Z7, not self.is_outwards()))
        curve_list.append(Segment(Z7, Z8))
        surface = SurfLine(line_list=curve_list,
                           label="Wind" + st + "_R0_T0_S0",
                           point_ref=Zmid)
        surf_list.append(surface)

    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)
    return surf_list
Пример #19
0
def build_geometry(self, alpha=0, delta=0, is_simplified=False):
    """Compute the curve (Segment) needed to plot the Slot.
    The ending point of a curve is the starting point of the next curve in
    the list

    Parameters
    ----------
    self : HoleM57
        A HoleM57 object
    alpha : float
        Angle to rotate the slot (Default value = 0) [rad]
    delta : complex
        Complex to translate the slot (Default value = 0)
    is_simplified : bool
       True to avoid line superposition

    Returns
    -------
    surf_list: list
        List of SurfLine needed to draw the HoleM57

    """

    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"
    Rbo = self.get_Rbo()

    # "Tooth" angle (P1',0,P1)
    alpha_T = 2 * arcsin(self.W3 / (2 * (Rbo - self.H1)))
    # magnet pole pitch angle (Z1,0,Z1')
    alpha_S = (2 * pi / self.Zh) - alpha_T
    # Angle (P1,P1',P4') and (P5',P4', )
    alpha = (pi - self.W0) / 2
    # Half slot pitch
    hssp = pi / self.Zh

    Z1 = (Rbo - self.H1) * exp(-1j * alpha_S / 2)
    x11 = 2 * sin(alpha_S / 2) * (Rbo - self.H1)  # Distance from P1 to P1'
    # In rect triangle P4, P1, perp (P1,P1') with P4
    H = tan(alpha) * (x11 / 2 - self.W1 / 2)
    Z4 = Z1.real - H - 1j * self.W1 / 2

    x45 = self.H2 / cos(alpha)  # distance from P4 to P5
    Z5 = Z4 - x45

    # Get coordinates of "random" points on (P5,P8) and (P1,P8)
    # In ref P4 center and P1 on X+ axis
    Z58 = (self.W4 - 1j * self.H2) * exp(1j * angle(Z1 - Z4)) + Z4
    # In the tooth ref
    Z18 = (Rbo - self.H1 - self.H2 + 1j * self.W3 / 2) * exp(-1j * hssp)
    Z8 = inter_line_line(Z5, Z58, Z1, Z18)[0]

    # In ref "b" P4 center and P1 on X+ axis
    Z8b = (Z8 - Z4) * exp(-1j * angle(Z1 - Z4))
    Z2 = (Z8b + 1j * self.H2 - self.W2) * exp(1j * angle(Z1 - Z4)) + Z4
    Z3 = (Z8b + 1j * self.H2 - self.W2 - self.W4) * exp(
        1j * angle(Z1 - Z4)) + Z4
    Z7 = (Z8b - self.W2) * exp(1j * angle(Z1 - Z4)) + Z4
    Z6 = (Z8b - self.W2 - self.W4) * exp(1j * angle(Z1 - Z4)) + Z4

    # Symmetry
    Z1s = Z1.conjugate()
    Z2s = Z2.conjugate()
    Z3s = Z3.conjugate()
    Z4s = Z4.conjugate()
    Z5s = Z5.conjugate()
    Z6s = Z6.conjugate()
    Z7s = Z7.conjugate()
    Z8s = Z8.conjugate()

    surf_list = list()
    # Z_list = array([Z1, Z2, Z3, Z4, Z5, Z6, Z7, Z8])
    # plt.plot(Z_list.real, Z_list.imag, "x r")
    # for ii in range(8):
    #     plt.text(Z_list[ii].real, Z_list[ii].imag, "Z" + str(ii + 1))
    # plt.show()
    # Check schematics:
    assert abs(abs(Z7 - Z8) - self.W2) < 1e-6
    assert abs(abs(Z6 - Z7) - self.W4) < 1e-6
    assert abs(abs(Z2 - Z3) - self.W4) < 1e-6
    assert abs(abs(Z2 - Z7) - self.H2) < 1e-6
    assert abs(abs(Z4 - Z4s) - self.W1) < 1e-6
    assert abs(abs(Z5 - Z5s) - self.W1) < 1e-6
    # TODO: Create all the surfaces for all the cases
    # (with/without magnet W1>0 or W1=0)
    # Air surface (W3) with magnet_0
    curve_list_air = list()
    curve_list_air.append(Segment(Z1, Z2))
    curve_list_air.append(Segment(Z2, Z7))
    if self.W2 > 0:
        curve_list_air.append(Segment(Z7, Z8))
    curve_list_air.append(Segment(Z8, Z1))

    # initiating the label of the line on the air surface
    curve_list_air = set_name_line(curve_list_air, "hole_1_line")
    point_ref = (Z1 + Z2 + Z7 + Z8) / 4
    S1 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Magnet_0 surface
    curve_list_mag = list()
    if is_simplified:
        curve_list_mag.append(Segment(Z7, Z2))
        curve_list_mag.append(Segment(Z3, Z6))
    else:
        curve_list_mag.append(Segment(Z2, Z3))
        curve_list_mag.append(Segment(Z3, Z6))
        curve_list_mag.append(Segment(Z6, Z7))
        curve_list_mag.append(Segment(Z7, Z2))

    # initiating the label of the line of the magnet surface
    curve_list_mag = set_name_line(curve_list_mag, "magnet_1_line")
    point_ref = (Z2 + Z3 + Z6 + Z7) / 4
    S2 = SurfLine(
        line_list=curve_list_mag,
        label="Magnet" + st + "_N_R0_T0_S0",
        point_ref=point_ref,
    )

    # Air surface with magnet_0 and W1 > 0
    curve_list_air = list()
    curve_list_air.append(Segment(Z4, Z5))
    curve_list_air.append(Segment(Z5, Z6))
    curve_list_air.append(Segment(Z6, Z3))
    if abs(Z4 - Z3) > 1e-6:
        curve_list_air.append(Segment(Z3, Z4))

    # initiating the label of the line on the air surface
    curve_list_air = set_name_line(curve_list_air, "hole_2_line")
    point_ref = (Z6 + Z5 + Z4) / 3

    S3 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Symmetry Air surface (W3) with magnet_1
    curve_list_air = list()
    curve_list_air.append(Segment(Z2s, Z1s))
    curve_list_air.append(Segment(Z1s, Z8s))
    if self.W2 > 0:
        curve_list_air.append(Segment(Z8s, Z7s))
    curve_list_air.append(Segment(Z7s, Z2s))
    point_ref = (Z1s + Z2s + Z8s + Z7s) / 4
    # initiating the label of the line on the air surface
    curve_list_air = set_name_line(curve_list_air, "hole_3_line")
    S4 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # magnet_1 surface
    curve_list_mag = list()
    if is_simplified:
        curve_list_mag.append(Segment(Z2s, Z7s))
        curve_list_mag.append(Segment(Z6s, Z3s))
    else:
        curve_list_mag.append(Segment(Z3s, Z2s))
        curve_list_mag.append(Segment(Z2s, Z7s))
        curve_list_mag.append(Segment(Z7s, Z6s))
        curve_list_mag.append(Segment(Z6s, Z3s))
    point_ref = (Z3s + Z2s + Z7s + Z6s) / 4

    # initiating the label of the line on the magnet surface
    curve_list_mag = set_name_line(curve_list_mag, "magnet_2_line")
    S5 = SurfLine(
        line_list=curve_list_mag,
        label="Magnet" + st + "_N_R0_T1_S0",
        point_ref=point_ref,
    )

    # Air surface with magnet_1 and W1 > 0
    curve_list_air = list()
    curve_list_air.append(Segment(Z3s, Z6s))
    curve_list_air.append(Segment(Z6s, Z5s))
    curve_list_air.append(Segment(Z5s, Z4s))
    if abs(Z4 - Z3) > 1e-6:
        curve_list_air.append(Segment(Z4s, Z3s))

    point_ref = (Z3s + Z6s + Z5s) / 3

    # initiating the label of the line on the air surface
    curve_list_air = set_name_line(curve_list_air, "hole_4_line")
    S6 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Air surface between magnet_0 and magnet_1 with W1 == 0
    curve_list_air = list()
    curve_list_air.append(Segment(Z3, Z4))
    curve_list_air.append(Segment(Z4, Z3s))
    curve_list_air.append(Segment(Z3s, Z6s))
    curve_list_air.append(Segment(Z6s, Z5))
    curve_list_air.append(Segment(Z5, Z6))
    curve_list_air.append(Segment(Z6, Z3))

    # initiating the label of the line on the air surface
    curve_list_air = set_name_line(curve_list_air, "hole_2_line")
    point_ref = (Z5 + Z4) / 2

    S7 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Create the surface list by selecting the correct ones
    if self.magnet_0 and self.magnet_1 and self.W1 > 0:
        surf_list = [S1, S2, S3, S6, S5, S4]
    elif self.magnet_0 and self.magnet_1 and self.W1 == 0:
        surf_list = [S1, S2, S7, S5, S4]
    # elif self.magnet_0 and not self.magnet_1 and self.W1 > 0:
    #     surf_list = [S1, S2, S3, S9]
    # elif self.magnet_0 and not self.magnet_1 and self.W1 == 0:
    #     surf_list = [S1, S2, S10]
    # elif not self.magnet_0 and self.magnet_1 and self.W1 > 0:
    #     surf_list = [S8, S6, S5, S4]
    # elif not self.magnet_0 and self.magnet_1 and self.W1 == 0:
    #     surf_list = [S11, S5, S4]
    # elif not self.magnet_0 and not self.magnet_1 and self.W1 > 0:
    #     surf_list = [S8, S9]
    # elif not self.magnet_0 and not self.magnet_1 and self.W1 == 0:
    #     surf_list = [S12]

    # Apply the transformations
    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)

    return surf_list
Пример #20
0
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

    """

    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"

    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)))
                if jj != Ntan - 1:
                    curve_list.append(Segment(Z2, Z3))
                if ii != Nrad - 1:
                    curve_list.append(Arc1(Z3, Z4, -abs(Z3)))
                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)))
                curve_list.append(Segment(Z2, Z3))
                curve_list.append(Arc1(Z3, Z4, -abs(Z3)))
                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
Пример #21
0
def build_geometry_wind(self,
                        Nrad,
                        Ntan,
                        is_simplified=False,
                        alpha=0,
                        delta=0):
    """Split the slot winding area in several zone

    Parameters
    ----------
    self : SlotW29
        A SlotW29 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

    """

    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"
    [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
Пример #22
0
def get_sliding_band(sym, lam_int, lam_ext):
    """Returns  a list of surface in the airgap including the sliding band surface

    Parameters
    ----------
    sym: int
        Symmetry factor (1= full machine, 2= half of the machine...)
    Rgap_mec_int: float
        Internal lamination mechanic radius
    Rgap_mec_ext: float
        External lamination mechanic radius

    Returns
    -------
    surf_list: list
        List of surface in the airgap including the sliding band surface
    """

    Rgap_mec_int = lam_int.comp_radius_mec()
    Rgap_mec_ext = lam_ext.comp_radius_mec()
    Rgap_mag_int = lam_int.Rext
    Rgap_mag_ext = lam_ext.Rint
    Wgap_mec = Rgap_mec_ext - Rgap_mec_int
    W_sb = Wgap_mec / 3  # Width sliding band
    surf_list = list()
    if sym == 1:  # Complete machine
        # Bottom sliding band
        surf_list.append(
            Circle(
                center=0,
                radius=Rgap_mec_int + W_sb,
                label="Airgap",
                point_ref=(Rgap_mec_int + W_sb / 2) * exp(1j * pi / 2),
                line_label="sliding_line",
            ))
        # Top sliding band
        surf_list.append(
            Circle(
                center=0,
                radius=Rgap_mec_int + 2 * W_sb,
                label="Airgap",
                point_ref=(Rgap_mec_ext - W_sb / 2) * exp(1j * pi / 2),
                line_label="sliding_line",
            ))
        # Middle
        surf_list.append(
            SurfLine(
                line_list=[],
                point_ref=(Rgap_mec_int + W_sb * 3 / 2) * exp(1j * pi / 2),
                label="No_mesh",
            ))
    else:  # Symmetry
        # Bottom line
        Z1 = Rgap_mag_int
        Z2 = Rgap_mec_int + W_sb
        Z3 = Z2 * exp(1j * 2 * pi / sym)
        Z4 = Z1 * exp(1j * 2 * pi / sym)
        airgap_lines = list()
        airgap_lines.append(Segment(begin=Z1, end=Z2, label="airgap_line_1"))
        airgap_lines.append(
            Arc1(begin=Z2,
                 end=Z3,
                 radius=Rgap_mec_int + W_sb,
                 label="sliding_line"))
        airgap_lines.append(Segment(begin=Z3, end=Z4, label="airgap_line_1"))
        surf_list.append(
            SurfLine(
                line_list=airgap_lines,
                point_ref=(Z2 - W_sb / 2) * exp(1j * pi / sym),
                label="Airgap",
            ))
        # Top line
        Z5 = Rgap_mag_ext
        Z6 = Rgap_mec_ext - W_sb
        Z7 = Z6 * exp(1j * 2 * pi / sym)
        Z8 = Z5 * exp(1j * 2 * pi / sym)
        airgap_lines = list()
        airgap_lines.append(Segment(begin=Z5, end=Z6, label="airgap_line_2"))
        airgap_lines.append(
            Arc1(begin=Z6,
                 end=Z7,
                 radius=Rgap_mec_ext - W_sb,
                 label="sliding_line"))
        airgap_lines.append(Segment(begin=Z7, end=Z8, label="airgap_line_2"))
        surf_list.append(
            SurfLine(
                line_list=airgap_lines,
                point_ref=(Z6 + W_sb / 2) * exp(1j * pi / sym),
                label="Airgap",
            ))

    return surf_list
Пример #23
0
def build_geometry(self, alpha=0, delta=0, is_simplified=False):
    """Compute the curve (Segment) needed to plot the Slot.
    The ending point of a curve is the starting point of the next curve in
    the list

    Parameters
    ----------
    self : HoleM50
        A HoleM50 object
    alpha : float
        Angle to rotate the slot (Default value = 0) [rad]
    delta : complex
        Complex to translate the slot (Default value = 0)
    is_simplified : bool
       True to avoid line superposition

    Returns
    -------
    surf_list: list
        List of SurfLine needed to draw the HoleM50

    """

    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"
    Rbo = self.get_Rbo()

    # magnet pole pitch angle, must be <2*pi/2*p
    alpham = 2 * arcsin(self.W0 / (2 * (Rbo - self.H1)))  # angle (Z9,0,Z9')

    Harc = (Rbo - self.H1) * (1 - cos(alpham / 2))
    # alpha on schematics
    gammam = arctan(
        (self.H0 - self.H1 - Harc) / (self.W0 / 2.0 - self.W1 / 2.0))
    #  betam = pi/2-alpham/2-gammam;#40.5
    hssp = pi / self.Zh

    x78 = (self.H3 - self.H2) / cos(gammam)  # distance from 7 to 8
    Z9 = Rbo - Harc - self.H1 - 1j * self.W0 / 2
    Z8 = Rbo - self.H0 - 1j * self.W1 / 2
    Z7 = Rbo - self.H0 - x78 - 1j * self.W1 / 2
    Z1 = (Rbo - self.H1) * exp(1j * (-hssp + arcsin(self.W3 /
                                                    (2 * (Rbo - self.H1)))))
    Z11 = (Z1 * exp(1j * hssp) + self.H4) * exp(-1j * hssp)
    Z10 = (Z9 * exp(1j * hssp) + self.H4) * exp(-1j * hssp)

    # Magnet coordinate with Z8 as center and x as the top edge of the magnet
    Z8b = self.W2
    Z8c = Z8b + self.W4
    Z5 = Z8b - 1j * self.H3
    Z4 = Z8c - 1j * self.H3
    Z6 = Z5 + 1j * self.H2
    Z3 = Z4 + 1j * self.H2

    Zmag = array([Z8b, Z6, Z5, Z4, Z3, Z8c])
    Zmag = Zmag * exp(1j * angle(Z9 - Z8))
    Zmag = Zmag + Z8

    # final complex numbers Zmag=[Z8b Z6 Z5 Z4 Z3 Z8c]
    (Z8b, Z6, Z5, Z4, Z3, Z8c) = Zmag

    # Rotation so [Z1,Z2] is parallel to the x axis
    Z3r, Z1r, Z6r = Z3 * exp(1j * hssp), Z1 * exp(1j * hssp), Z6 * exp(
        1j * hssp)
    # numerical resolution to find the last point Z2
    x = fsolve(lambda x: np_imag((Z3r - (Z1r - x)) / (Z6r - Z3r)),
               self.H3 - self.H2)
    Z2 = (Z1r - x[0]) * exp(-1j * hssp)

    # Symmetry
    Z1s = Z1.conjugate()
    Z2s = Z2.conjugate()
    Z3s = Z3.conjugate()
    Z4s = Z4.conjugate()
    Z5s = Z5.conjugate()
    Z6s = Z6.conjugate()
    Z7s = Z7.conjugate()
    Z8s = Z8.conjugate()
    Z9s = Z9.conjugate()
    Z10s = Z10.conjugate()
    Z11s = Z11.conjugate()
    Z8cs = Z8c.conjugate()
    Z8bs = Z8b.conjugate()

    surf_list = list()

    # Create all the surfaces for all the cases
    # Air surface (W3) with magnet_0
    curve_list_air = list()
    curve_list_air.append(Segment(Z1, Z2))
    curve_list_air.append(Segment(Z2, Z3))
    curve_list_air.append(Segment(Z3, Z8c))
    curve_list_air.append(Segment(Z8c, Z9))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z9, Z10))
    curve_list_air.append(Arc1(Z10, Z11, -Rbo + self.H1))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z11, Z1))
    point_ref = (Z1 + Z2 + Z3 + Z8c + Z9 + Z10 + Z11) / 7
    S1 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Magnet_0 surface
    curve_list_mag = list()
    if is_simplified:
        curve_list_mag.append(Segment(Z8c, Z3))
        curve_list_mag.append(Segment(Z6, Z8b))
    else:
        if Z3 != Z4:  # Z5 == Z6 if H2 = 0
            curve_list_mag.append(Segment(Z3, Z4))
        curve_list_mag.append(Segment(Z4, Z5))
        if Z5 != Z6:  # Z5 == Z6 if H2 = 0
            curve_list_mag.append(Segment(Z5, Z6))
        curve_list_mag.append(Segment(Z6, Z8b))
        curve_list_mag.append(Segment(Z8b, Z8c))
        curve_list_mag.append(Segment(Z8c, Z3))
    point_ref = (Z3 + Z4 + Z5 + Z6 + Z8b + Z8c) / 6
    S2 = SurfLine(
        line_list=curve_list_mag,
        label="Magnet" + st + "_N_R0_T0_S0",
        point_ref=point_ref,
    )

    # Air surface with magnet_0 and W1 > 0
    curve_list_air = list()
    curve_list_air.append(Segment(Z6, Z7))
    curve_list_air.append(Segment(Z7, Z8))
    if self.W2 > 0:  # if W2=0 Z8 = Z8b
        curve_list_air.append(Segment(Z8, Z8b))
    curve_list_air.append(Segment(Z8b, Z6))
    point_ref = (Z6 + Z7 + Z8 + Z8b) / 4

    S3 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Symmetry Air surface (W3) with magnet_1
    curve_list_air = list()
    curve_list_air.append(Segment(Z1s, Z2s))
    curve_list_air.append(Segment(Z2s, Z3s))
    curve_list_air.append(Segment(Z3s, Z8cs))
    curve_list_air.append(Segment(Z8cs, Z9s))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z9s, Z10s))
    curve_list_air.append(Arc1(Z10s, Z11s, -Rbo + self.H1))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z11s, Z1s))
    point_ref = (Z1s + Z2s + Z3s + Z8cs + Z9s + Z10s + Z11) / 7

    S4 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # magnet_1 surface
    curve_list_mag = list()
    if is_simplified:
        curve_list_mag.append(Segment(Z8cs, Z3s))
        curve_list_mag.append(Segment(Z6s, Z8bs))
    else:
        if Z3s != Z4s:  # Z5 == Z6 if H2 = 0
            curve_list_mag.append(Segment(Z3s, Z4s))
        curve_list_mag.append(Segment(Z4s, Z5s))
        if Z5s != Z6s:  # Z5 == Z6 if H2 = 0
            curve_list_mag.append(Segment(Z5s, Z6s))
        curve_list_mag.append(Segment(Z6s, Z8bs))
        curve_list_mag.append(Segment(Z8bs, Z8cs))
        curve_list_mag.append(Segment(Z8cs, Z3s))
    point_ref = (Z3s + Z4s + Z5s + Z6s + Z8bs + Z8cs) / 6
    S5 = SurfLine(
        line_list=curve_list_mag,
        label="Magnet" + st + "_N_R0_T1_S0",
        point_ref=point_ref,
    )

    # Air surface with magnet_1 and W1 > 0
    curve_list_air = list()
    curve_list_air.append(Segment(Z6s, Z7s))
    curve_list_air.append(Segment(Z7s, Z8s))
    if self.W2 > 0:  # if W2=0: Z8s = Z8bs
        curve_list_air.append(Segment(Z8s, Z8bs))
    curve_list_air.append(Segment(Z8bs, Z6s))
    point_ref = (Z6s + Z7s + Z8s + Z8bs) / 4

    S6 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Air surface both magnet and W1 = 0 (S6 + S3)
    curve_list_air = list()
    curve_list_air.append(Segment(Z6, Z7))
    curve_list_air.append(Segment(Z7, Z6s))
    curve_list_air.append(Segment(Z6s, Z8bs))
    if self.W2 > 0:  # If W2 = 0: Z8b = Z8 = Z8bs
        curve_list_air.append(Segment(Z8bs, Z8s))
        curve_list_air.append(Segment(Z8s, Z8b))
    curve_list_air.append(Segment(Z8b, Z6))
    point_ref = (Z6 + Z7 + Z6s + Z8s + Z8bs + Z8b) / 6
    S7 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Air surface without magnet_0 and W1 > 0 (S1 + S2 + S3)
    curve_list_air = list()
    curve_list_air.append(Segment(Z1, Z2))
    curve_list_air.append(Segment(Z2, Z3))
    if self.H2 > 0:
        curve_list_air.append(Segment(Z3, Z4))
    curve_list_air.append(Segment(Z4, Z5))
    if self.H2 > 0:
        curve_list_air.append(Segment(Z5, Z6))
    curve_list_air.append(Segment(Z6, Z7))
    curve_list_air.append(Segment(Z7, Z8))
    curve_list_air.append(Segment(Z8, Z9))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z9, Z10))
    curve_list_air.append(Arc1(Z10, Z11, -Rbo + self.H1))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z11, Z1))
    point_ref = (Z1 + Z2 + Z3 + Z8c + Z9 + Z10 + Z11) / 7
    S8 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Air surface without magnet_1 and W1 > 0
    curve_list_air = list()
    curve_list_air.append(Segment(Z1s, Z2s))
    curve_list_air.append(Segment(Z2s, Z3s))
    if self.H2 > 0:
        curve_list_air.append(Segment(Z3s, Z4s))
    curve_list_air.append(Segment(Z4s, Z5s))
    if self.H2 > 0:
        curve_list_air.append(Segment(Z5s, Z6s))
    curve_list_air.append(Segment(Z6s, Z7s))
    curve_list_air.append(Segment(Z7s, Z8s))
    curve_list_air.append(Segment(Z8s, Z9s))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z9s, Z10s))
    curve_list_air.append(Arc1(Z10s, Z11s, -Rbo + self.H1))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z11s, Z1s))
    point_ref = (Z1s + Z2s + Z3s + Z8cs + Z9s + Z10s + Z11s) / 7
    S9 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Air surface with magnet_0 without magnet_1 and W1 = 0
    # (S4 + S5 + S7)
    curve_list_air = list()
    curve_list_air.append(Segment(Z1s, Z2s))
    curve_list_air.append(Segment(Z2s, Z3s))
    if self.H2 > 0:
        curve_list_air.append(Segment(Z3s, Z4s))
    curve_list_air.append(Segment(Z4s, Z5s))
    if self.H2 > 0:
        curve_list_air.append(Segment(Z5s, Z6s))
    curve_list_air.append(Segment(Z6s, Z7s))
    curve_list_air.append(Segment(Z7s, Z6))
    curve_list_air.append(Segment(Z6, Z8b))
    curve_list_air.append(Segment(Z8b, Z8s))
    curve_list_air.append(Segment(Z8s, Z9s))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z9s, Z10s))
    curve_list_air.append(Arc1(Z10s, Z11s, -Rbo + self.H1))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z11s, Z1s))
    point_ref = (Z1s + Z2s + Z3s + Z8cs + Z9s + Z10s + Z11s) / 7
    S10 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Air surface with magnet_1 without magnet_0 and W1 = 0
    # (S1 + S2 + S7)
    curve_list_air = list()
    curve_list_air.append(Segment(Z1, Z2))
    curve_list_air.append(Segment(Z2, Z3))
    if self.H2 > 0:
        curve_list_air.append(Segment(Z3, Z4))
    curve_list_air.append(Segment(Z4, Z5))
    if self.H2 > 0:
        curve_list_air.append(Segment(Z5, Z6))
    curve_list_air.append(Segment(Z6, Z7))
    curve_list_air.append(Segment(Z7, Z6s))
    curve_list_air.append(Segment(Z6s, Z8bs))
    curve_list_air.append(Segment(Z8bs, Z8))
    curve_list_air.append(Segment(Z8, Z9))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z9, Z10))
    curve_list_air.append(Arc1(Z10, Z11, -Rbo + self.H1))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z11, Z1))
    point_ref = (Z1 + Z2 + Z3 + Z8c + Z9 + Z10 + Z11) / 7
    S11 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Air surface without magnet and W1 = 0
    # (S4 + S5 + S7 + S2 + S1)
    curve_list_air = list()
    curve_list_air.append(Segment(Z1, Z2))
    curve_list_air.append(Segment(Z2, Z3))
    if Z3 != Z4:  # if H2 = 0
        curve_list_air.append(Segment(Z3, Z4))
    curve_list_air.append(Segment(Z4, Z5))
    if Z5 != Z6:  # if H2 = 0
        curve_list_air.append(Segment(Z5, Z6))
    curve_list_air.append(Segment(Z6, Z7))
    curve_list_air.append(Segment(Z7, Z6s))
    if Z5s != Z6s:
        curve_list_air.append(Segment(Z6s, Z5s))
    curve_list_air.append(Segment(Z5s, Z4s))
    if Z3s != Z4s:
        curve_list_air.append(Segment(Z4s, Z3s))
    curve_list_air.append(Segment(Z3s, Z2s))
    curve_list_air.append(Segment(Z2s, Z1s))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z1s, Z11s))
    curve_list_air.append(Arc1(Z11s, Z10s, -Rbo + self.H1))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z10s, Z9s))
    curve_list_air.append(Segment(Z9s, Z8s))
    curve_list_air.append(Segment(Z8s, Z9))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z9, Z10))
    curve_list_air.append(Arc1(Z10, Z11, -Rbo + self.H1))
    if self.H4 > 0:
        curve_list_air.append(Segment(Z11, Z1))

    point_ref = (Z6 + Z8b + Z7 + Z8 + Z6s + Z8bs) / 6
    S12 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Create the surface list by selecting the correct ones
    if self.magnet_0 and self.magnet_1 and self.W1 > 0:
        surf_list = [S1, S2, S3, S6, S5, S4]
    elif self.magnet_0 and self.magnet_1 and self.W1 == 0:
        surf_list = [S1, S2, S7, S5, S4]
    elif self.magnet_0 and not self.magnet_1 and self.W1 > 0:
        surf_list = [S1, S2, S3, S9]
    elif self.magnet_0 and not self.magnet_1 and self.W1 == 0:
        surf_list = [S1, S2, S10]
    elif not self.magnet_0 and self.magnet_1 and self.W1 > 0:
        surf_list = [S8, S6, S5, S4]
    elif not self.magnet_0 and self.magnet_1 and self.W1 == 0:
        surf_list = [S11, S5, S4]
    elif not self.magnet_0 and not self.magnet_1 and self.W1 > 0:
        surf_list = [S8, S9]
    elif not self.magnet_0 and not self.magnet_1 and self.W1 == 0:
        surf_list = [S12]

    # Apply the transformations
    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)

    return surf_list
Пример #24
0
def build_geometry_wind(self,
                        Nrad,
                        Ntan,
                        is_simplified=False,
                        alpha=0,
                        delta=0):
    """Split the slot winding area in several zone

    Parameters
    ----------
    self : SlotW27
        A SlotW27 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

    """
    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"
    # getting points coordinate
    [Z1, Z3, Z4, Z5, Z6, Z7, Z8] = self._comp_point_coordinate()
    Ztan1 = (Z3 + Z8) / 2.0
    Ztan2 = (Z5 + Z6) / 2.0
    Zmid = (Ztan1 + Ztan2) / 2.0

    if self.is_trap_wind:
        Zrad1 = Z7
        Zrad2 = Z4
        Zmid = (Z7 + Z4) / 2.0
    elif self.H1 < self.H2:  # Zrad1 between Z6 and Z7
        x = fsolve(
            lambda x: angle((Z7 - (Zmid + 1j * x)) / (Z7 - Z6)),
            -(self.W2 + self.W3) / 4.0,
        )
        Zrad1 = Zmid + 1j * x[0]
        Zrad2 = Zrad1.conjugate()
    elif self.H1 > self.H2:  # Zrad1 between Z8 and Z7
        x = fsolve(
            lambda x: angle((Z7 - (Zmid + 1j * x)) / (Z7 - Z8)),
            -(self.W2 + self.W1) / 4.0,
        )
        Zrad1 = Zmid + 1j * x[0]
        Zrad2 = Zrad1.conjugate()
    else:
        Zrad1 = Z7
        Zrad2 = Z4
    Z_3 = Ztan1 - (self.W0 * 1j / 2)
    Z_8 = Ztan1 + (self.W0 * 1j / 2)
    surf_list = list()
    if Nrad == 1 and Ntan == 2:
        if is_simplified:
            # Part 1 (0,0)
            point_list = [Z8, Ztan1, Ztan2, Z6, Z7]
            res = 0
            for Z in point_list:
                res += Z
            point_ref = res / len(point_list)
            curve_list = list()
            curve_list.append(Segment(Z_8, Ztan1))
            curve_list.append(Segment(Ztan1, Ztan2))
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part 2 (0,1)
            point_list = [Ztan1, Z3, Z4, Z5, Ztan2]
            res = 0
            for Z in point_list:
                res += Z
            point_ref = res / len(point_list)
            curve_list = list()
            curve_list.append(Segment(Ztan1, Z_3))
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
        else:
            # Part 1 (0,0)
            surf_list.append(
                gen_curve_list([Z8, Ztan1, Ztan2, Z6, Z7], "0", "0", st))
            # Part 2 (0,1)
            surf_list.append(
                gen_curve_list([Ztan1, Z3, Z4, Z5, Ztan2], "0", "1", st))
    elif Nrad == 2 and Ntan == 1:
        if is_simplified:
            # Part 1 (0,0)
            if not self.is_trap_wind and self.H2 > self.H1:
                point_list = [Z8, Z3, Z4, Zrad2, Zrad1, Z7]
            else:  # H2 == H1
                point_list = [Z8, Z3, Zrad2, Zrad1]
            res = 0
            for Z in point_list:
                res += Z
            point_ref = res / len(point_list)
            curve_list = list()
            curve_list.append(Segment(Z_8, Z_3))
            curve_list.append(Segment(Zrad2, Zrad1))
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part 2 (1,0)
            if not self.is_trap_wind and self.H1 > self.H2:
                point_list = [Zrad1, Zrad2, Z4, Z5, Z6, Z7]
            else:
                point_list = [Zrad1, Zrad2, Z5, Z6]
            res = 0
            for Z in point_list:
                res += Z
            point_ref = res / len(point_list)
            curve_list = list()
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
        else:
            # Part 1 (0,0)
            if not self.is_trap_wind and self.H2 > self.H1:
                point_list = [Z8, Z3, Z4, Zrad2, Zrad1, Z7]
            else:  # H2 == H1
                point_list = [Z8, Z3, Zrad2, Zrad1]
            surf_list.append(gen_curve_list(point_list, "0", "0", st))
            # Part 2 (1,0)
            if not self.is_trap_wind and self.H1 > self.H2:
                point_list = [Zrad1, Zrad2, Z4, Z5, Z6, Z7]
            else:
                point_list = [Zrad1, Zrad2, Z5, Z6]
            surf_list.append(gen_curve_list(point_list, "1", "0", st))

    elif Nrad == 2 and Ntan == 2:
        if is_simplified:
            # Part 1 (0,0)
            if not self.is_trap_wind and self.H2 > self.H1:
                point_list = [Z8, Ztan1, Zmid, Zrad1, Z7]
            else:  # H2 == H1
                point_list = [Z8, Ztan1, Zmid, Zrad1]
            res = 0
            for Z in point_list:
                res += Z
            point_ref = res / len(point_list)
            curve_list = list()
            curve_list.append(Segment(Z_8, Ztan1))
            curve_list.append(Segment(Ztan1, Zmid))
            curve_list.append(Segment(Ztan1, Zrad1))
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part 2 (1,0)
            if not self.is_trap_wind and self.H1 > self.H2:
                point_list = [Zrad1, Zmid, Ztan2, Z6, Z7]
            else:
                point_list = [Zrad1, Zmid, Ztan2, Z6]
            res = 0
            for Z in point_list:
                res += Z
            point_ref = res / len(point_list)
            curve_list = list()
            curve_list.append(Segment(Zmid, Ztan2))
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part 3 (0,1)
            if not self.is_trap_wind and self.H2 > self.H1:
                point_list = [Ztan1, Z3, Z4, Zrad2, Zmid]
            else:  # H2 == H1
                point_list = [Ztan1, Z3, Zrad2, Zmid]
            res = 0
            for Z in point_list:
                res += Z
            point_ref = res / len(point_list)
            curve_list = list()
            curve_list.append(Segment(Ztan1, Z_3))
            curve_list.append(Segment(Zrad2, Zmid))
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part 4 (1,1)
            if not self.is_trap_wind and self.H1 > self.H2:
                point_list = [Zmid, Zrad2, Z4, Z5, Ztan2]
            else:  # H2 == H1
                point_list = [Zmid, Zrad2, Z5, Ztan2]
            res = 0
            for Z in point_list:
                res += Z
            point_ref = res / len(point_list)
            curve_list = list()
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
        else:

            # Part 1 (0,0)
            if not self.is_trap_wind and self.H2 > self.H1:
                point_list = [Z8, Ztan1, Zmid, Zrad1, Z7]
            else:  # H2 == H1
                point_list = [Z8, Ztan1, Zmid, Zrad1]
            surf_list.append(gen_curve_list(point_list, "0", "0", st))
            # Part 2 (1,0)
            if not self.is_trap_wind and self.H1 > self.H2:
                point_list = [Zrad1, Zmid, Ztan2, Z6, Z7]
            else:
                point_list = [Zrad1, Zmid, Ztan2, Z6]
            surf_list.append(gen_curve_list(point_list, "1", "0", st))
            # Part 3 (0,1)
            if not self.is_trap_wind and self.H2 > self.H1:
                point_list = [Ztan1, Z3, Z4, Zrad2, Zmid]
            else:  # H2 == H1
                point_list = [Ztan1, Z3, Zrad2, Zmid]
            surf_list.append(gen_curve_list(point_list, "0", "1", st))
            # Part 4 (1,1)
            if not self.is_trap_wind and self.H1 > self.H2:
                point_list = [Zmid, Zrad2, Z4, Z5, Ztan2]
            else:  # H2 == H1
                point_list = [Zmid, Zrad2, Z5, Ztan2]
            surf_list.append(gen_curve_list(point_list, "1", "1", st))
    else:
        surf_list.append(gen_curve_list([Z8, Z3, Z4, Z5, Z6, Z7], "0", "0",
                                        st))

    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)
    return surf_list
Пример #25
0
def build_geometry_wind(self,
                        Nrad,
                        Ntan,
                        is_simplified=False,
                        alpha=0,
                        delta=0):
    """Split the slot winding area in several zone

    Parameters
    ----------
    self : SlotW28
        A SlotW28 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

    """
    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"

    [Z1, Z2, Z3, Z4, Z5, Z6, Z7, Z8, rot_sign] = self._comp_point_coordinate()
    if self.is_outwards():
        Ztan2 = Z5 + Z5.imag * (1 - 1j)
    else:
        Ztan2 = Z5 + Z5.imag * (-1 - 1j)

    Rarc = abs(Z5.imag)  # Radius of the top arc
    Ztan1 = (Z2 + Z7) / 2.0
    Zmid = (Ztan1 + Ztan2) / 2.0

    # Zrad1 between Z5 and Z6
    x = fsolve(lambda x: angle((Z6 - (Zmid + 1j * x)) / (Z6 - Z5)), -self.R1)
    Zrad1 = Zmid + 1j * x[0]
    Zrad2 = Zrad1.conjugate()

    Zmid = (Ztan1 + Ztan2) / 2.0

    # We can split in rad only if Zrad1 is between Z6 and Z5
    is_rad_splittable = self.H3 > 0 and (
        (Z6.real < Zrad1.real and Zrad1.real < Z5.real) or
        (Z5.real < Zrad1.real and Zrad1.real < Z6.real))

    # Creation of curve
    surf_list = list()
    if Nrad == 1 and Ntan == 2:
        if is_simplified:  # No doubling Line allowed
            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Z7, Ztan1))
            curve_list.append(Segment(Ztan1, Ztan2))
            point_ref = (Z7 + Ztan1 + Ztan2 + Z5 + Z6) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (0,1)
            curve_list = list()
            curve_list.append(Segment(Ztan1, Z2))
            point_ref = (Ztan1 + Z2 + Z3 + Z4 + Ztan2) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
        else:
            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Ztan1, Z2))
            curve_list.append(Arc1(Z2, Z3, rot_sign * self.R1))
            curve_list.append(Segment(Z3, Z4))
            curve_list.append(Arc1(Z4, Ztan2, rot_sign * Rarc))
            curve_list.append(Segment(Ztan2, Ztan1))
            point_ref = (Ztan1 + Z2 + Z3 + Z4 + Ztan2) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (0,1)
            curve_list = list()
            curve_list.append(Segment(Z7, Ztan1))
            curve_list.append(Segment(Ztan1, Ztan2))
            curve_list.append(Arc1(Ztan2, Z5, rot_sign * Rarc))
            curve_list.append(Segment(Z5, Z6))
            curve_list.append(Arc1(Z6, Z7, rot_sign * self.R1))
            point_ref = (Z7 + Ztan1 + Ztan2 + Z5 + Z6) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)

    elif Nrad == 2 and Ntan == 1 and is_rad_splittable:
        if is_simplified:  # No doubling Line allowed
            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Z7, Z2))
            curve_list.append(Segment(Zrad2, Zrad1))
            point_ref = (Z7 + Z2 + Z3 + Zrad2 + Zrad1 + Z6) / 6
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)
            curve_list = list()
            point_ref = (Zrad1 + Zrad2 + Z4 + Z5) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
        else:
            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Z7, Z2))
            curve_list.append(Arc1(Z2, Z3, rot_sign * self.R1))
            curve_list.append(Segment(Z3, Zrad2))
            curve_list.append(Segment(Zrad2, Zrad1))
            curve_list.append(Segment(Zrad1, Z6))
            curve_list.append(Arc1(Z6, Z7, rot_sign * self.R1))
            point_ref = (Z7 + Z2 + Z3 + Zrad2 + Zrad1 + Z6) / 6
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)
            curve_list = list()
            curve_list.append(Segment(Zrad1, Zrad2))
            curve_list.append(Segment(Zrad2, Z4))
            curve_list.append(Arc3(Z4, Z5, self.is_outwards()))
            curve_list.append(Segment(Z5, Zrad1))
            point_ref = (Zrad1 + Zrad2 + Z4 + Z5) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)

    elif Nrad == 2 and Ntan == 2 and is_rad_splittable:
        if is_simplified:  # No doubling Line allowed
            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Z7, Ztan1))
            curve_list.append(Segment(Ztan1, Zmid))
            curve_list.append(Segment(Zmid, Zrad1))
            point_ref = (Z7 + Ztan1 + Zmid + Zrad1 + Z6) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)
            curve_list = list()
            curve_list.append(Segment(Zmid, Ztan2))
            point_ref = (Zrad1 + Zmid + Ztan2 + Z5) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part 3 (0,1)
            curve_list = list()
            curve_list.append(Segment(Ztan1, Z2))
            curve_list.append(Segment(Zrad2, Zmid))
            point_ref = (Ztan1 + Z2 + Z3 + Zrad2 + Zmid) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part4 (1,1)
            curve_list = list()
            point_ref = (Zmid + Zrad2 + Z4 + Ztan2) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
        else:

            # Part 1 (0,0)
            curve_list = list()
            curve_list.append(Segment(Z7, Ztan1))
            curve_list.append(Segment(Ztan1, Zmid))
            curve_list.append(Segment(Zmid, Zrad1))
            curve_list.append(Segment(Zrad1, Z6))
            curve_list.append(Arc1(Z6, Z7, rot_sign * self.R1))
            point_ref = (Z7 + Ztan1 + Zmid + Zrad1 + Z6) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)
            curve_list = list()
            curve_list.append(Segment(Zrad1, Zmid))
            curve_list.append(Segment(Zmid, Ztan2))
            curve_list.append(Arc1(Ztan2, Z5, rot_sign * Rarc))
            curve_list.append(Segment(Z5, Zrad1))
            point_ref = (Zrad1 + Zmid + Ztan2 + Z5) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part 3 (0,1)
            curve_list = list()
            curve_list.append(Segment(Ztan1, Z2))
            curve_list.append(Arc1(Z2, Z3, rot_sign * self.R1))
            curve_list.append(Segment(Z3, Zrad2))
            curve_list.append(Segment(Zrad2, Zmid))
            curve_list.append(Segment(Zmid, Ztan1))
            point_ref = (Ztan1 + Z2 + Z3 + Zrad2 + Zmid) / 5
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part4 (1,1)
            curve_list = list()
            curve_list.append(Segment(Zmid, Zrad2))
            curve_list.append(Segment(Zrad2, Z4))
            curve_list.append(Arc1(Z4, Ztan2, rot_sign * Rarc))
            curve_list.append(Segment(Ztan2, Zmid))
            point_ref = (Zmid + Zrad2 + Z4 + Ztan2) / 4
            surface = SurfLine(
                line_list=curve_list,
                label="Wind" + st + "_R1_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
    else:  # Default : only one zone
        # Only one zone for type 2_6 for now
        curve_list = self.build_geometry()
        # Remove the isthmus part
        curve_list = curve_list[1:-1]
        curve_list = [Segment(curve_list[-1].end, curve_list[0].begin)
                      ] + curve_list
        surface = SurfLine(line_list=curve_list,
                           label="Wind" + st + "_R0_T0_S0",
                           point_ref=Zmid)
        surf_list.append(surface)
    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)

    return surf_list
Пример #26
0
def build_geometry(self, alpha=0, delta=0, is_simplified=False):
    """Compute the curve (Segment) needed to plot the Slot.
    The ending point of a curve is the starting point of the next curve in
    the list

    Parameters
    ----------
    self : HoleM57
        A HoleM57 object
    alpha : float
        Angle to rotate the slot (Default value = 0) [rad]
    delta : complex
        Complex to translate the slot (Default value = 0)
    is_simplified : bool
       True to avoid line superposition

    Returns
    -------
    surf_list: list
        List of SurfLine needed to draw the HoleM57

    """

    # Get correct label for surfaces
    lam_label = self.parent.get_label()
    R_id, surf_type = self.get_R_id()
    vent_label = lam_label + "_" + surf_type + "_R" + str(R_id) + "-"
    mag_label = lam_label + "_" + HOLEM_LAB + "_R" + str(R_id) + "-"

    # Get all the points
    point_dict = self._comp_point_coordinate()
    Z1 = point_dict["Z1"]
    Z2 = point_dict["Z2"]
    Z3 = point_dict["Z3"]
    Z4 = point_dict["Z4"]
    Z5 = point_dict["Z5"]
    Z6 = point_dict["Z6"]
    Z7 = point_dict["Z7"]
    Z8 = point_dict["Z8"]

    Z1s = point_dict["Z1s"]
    Z2s = point_dict["Z2s"]
    Z3s = point_dict["Z3s"]
    Z4s = point_dict["Z4s"]
    Z5s = point_dict["Z5s"]
    Z6s = point_dict["Z6s"]
    Z7s = point_dict["Z7s"]
    Z8s = point_dict["Z8s"]

    surf_list = list()
    # Z_list = array([Z1, Z2, Z3, Z4, Z5, Z6, Z7, Z8])
    # plt.plot(Z_list.real, Z_list.imag, "x r")
    # for ii in range(8):
    #     plt.text(Z_list[ii].real, Z_list[ii].imag, "Z" + str(ii + 1))
    # plt.show()
    # Check schematics:
    assert abs(abs(Z7 - Z8) - self.W2) < 1e-6
    assert abs(abs(Z6 - Z7) - self.W4) < 1e-6
    assert abs(abs(Z2 - Z3) - self.W4) < 1e-6
    assert abs(abs(Z2 - Z7) - self.H2) < 1e-6
    assert abs(abs(Z4 - Z4s) - self.W1) < 1e-6
    assert abs(abs(Z5 - Z5s) - self.W1) < 1e-6
    # TODO: Create all the surfaces for all the cases
    # (with/without magnet W1>0 or W1=0)
    # Air surface (W3) with magnet_0
    curve_list = list()
    curve_list.append(Segment(Z1, Z2))
    curve_list.append(Segment(Z2, Z7))
    if self.W2 > 0:
        curve_list.append(Segment(Z7, Z8))
    curve_list.append(Segment(Z8, Z1))

    # initiating the label of the line on the air surface
    # curve_list = set_name_line(curve_list, "hole_1_line")
    point_ref = (Z1 + Z2 + Z7 + Z8) / 4
    S1 = SurfLine(line_list=curve_list, label=vent_label + "T0-S0", point_ref=point_ref)

    # Magnet_0 surface
    curve_list = list()
    if is_simplified:
        curve_list.append(Segment(Z7, Z2))
        curve_list.append(Segment(Z3, Z6))
    else:
        curve_list.append(Segment(Z2, Z3))
        curve_list.append(Segment(Z3, Z6))
        curve_list.append(Segment(Z6, Z7))
        curve_list.append(Segment(Z7, Z2))

    # initiating the label of the line of the magnet surface
    # curve_list = set_name_line(curve_list, "magnet_1_line")
    point_ref = (Z2 + Z3 + Z6 + Z7) / 4
    S2 = SurfLine(
        line_list=curve_list,
        label=mag_label + "T0-S0",
        point_ref=point_ref,
    )

    # Air surface with magnet_0 and W1 > 0
    curve_list = list()
    curve_list.append(Segment(Z4, Z5))
    curve_list.append(Segment(Z5, Z6))
    curve_list.append(Segment(Z6, Z3))
    if abs(Z4 - Z3) > 1e-6:
        curve_list.append(Segment(Z3, Z4))

    # initiating the label of the line on the air surface
    # curve_list = set_name_line(curve_list, "hole_2_line")
    point_ref = (Z6 + Z5 + Z4) / 3

    S3 = SurfLine(line_list=curve_list, label=vent_label + "T1-S0", point_ref=point_ref)

    # Symmetry Air surface (W3) with magnet_1
    curve_list = list()
    curve_list.append(Segment(Z2s, Z1s))
    curve_list.append(Segment(Z1s, Z8s))
    if self.W2 > 0:
        curve_list.append(Segment(Z8s, Z7s))
    curve_list.append(Segment(Z7s, Z2s))
    point_ref = (Z1s + Z2s + Z8s + Z7s) / 4
    # initiating the label of the line on the air surface
    # curve_list = set_name_line(curve_list, "hole_3_line")
    S4 = SurfLine(line_list=curve_list, label=vent_label + "T2-S0", point_ref=point_ref)

    # magnet_1 surface
    curve_list = list()
    if is_simplified:
        curve_list.append(Segment(Z2s, Z7s))
        curve_list.append(Segment(Z6s, Z3s))
    else:
        curve_list.append(Segment(Z3s, Z2s))
        curve_list.append(Segment(Z2s, Z7s))
        curve_list.append(Segment(Z7s, Z6s))
        curve_list.append(Segment(Z6s, Z3s))
    point_ref = (Z3s + Z2s + Z7s + Z6s) / 4

    # initiating the label of the line on the magnet surface
    # curve_list = set_name_line(curve_list, "magnet_2_line")
    S5 = SurfLine(
        line_list=curve_list,
        label=mag_label + "T1-S0",
        point_ref=point_ref,
    )

    # Air surface with magnet_1 and W1 > 0
    curve_list = list()
    curve_list.append(Segment(Z3s, Z6s))
    curve_list.append(Segment(Z6s, Z5s))
    curve_list.append(Segment(Z5s, Z4s))
    if abs(Z4 - Z3) > 1e-6:
        curve_list.append(Segment(Z4s, Z3s))

    point_ref = (Z3s + Z6s + Z5s) / 3

    # initiating the label of the line on the air surface
    # curve_list = set_name_line(curve_list, "hole_4_line")
    S6 = SurfLine(line_list=curve_list, label=vent_label + "T1-S0", point_ref=point_ref)

    # Air surface between magnet_0 and magnet_1 with W1 == 0
    curve_list = list()
    curve_list.append(Segment(Z3, Z4))
    curve_list.append(Segment(Z4, Z3s))
    curve_list.append(Segment(Z3s, Z6s))
    curve_list.append(Segment(Z6s, Z5))
    curve_list.append(Segment(Z5, Z6))
    curve_list.append(Segment(Z6, Z3))

    # initiating the label of the line on the air surface
    # curve_list = set_name_line(curve_list, "hole_2_line")
    point_ref = (Z5 + Z4) / 2

    S7 = SurfLine(line_list=curve_list, label=vent_label + "T2-S0", point_ref=point_ref)

    # Air surface without magnet_0 and W1 > 0
    curve_list = list()
    curve_list.append(Segment(Z1, Z8))
    curve_list.append(Segment(Z8, Z5))
    curve_list.append(Segment(Z5, Z4))
    curve_list.append(Segment(Z4, Z1))

    # initiating the label of the line on the air surface
    # curve_list = set_name_line(curve_list, "hole_1_line")
    point_ref = (Z5 + Z1) / 2

    S8 = SurfLine(line_list=curve_list, label=vent_label + "T1-S0", point_ref=point_ref)

    # Air surface without magnet_1 and W1 > 0
    curve_list = list()
    curve_list.append(Segment(Z1s, Z8s))
    curve_list.append(Segment(Z8s, Z5s))
    curve_list.append(Segment(Z5s, Z4s))
    curve_list.append(Segment(Z4s, Z1s))

    # initiating the label of the line on the air surface
    # curve_list = set_name_line(curve_list, "hole_2_line")
    point_ref = (Z5s + Z1s) / 2

    S9 = SurfLine(line_list=curve_list, label=vent_label + "T0-S0", point_ref=point_ref)

    # Air surface No magnet and W1 == 0
    curve_list = list()
    curve_list.append(Segment(Z4, Z1))
    curve_list.append(Segment(Z1, Z8))
    curve_list.append(Segment(Z8, Z5))
    curve_list.append(Segment(Z5, Z8s))
    curve_list.append(Segment(Z8s, Z1s))
    curve_list.append(Segment(Z1s, Z4))

    # initiating the label of the line on the air surface
    # curve_list = set_name_line(curve_list, "hole_1_line")
    point_ref = (Z4 + Z5) / 2

    S12 = SurfLine(
        line_list=curve_list, label=vent_label + "T0-S0", point_ref=point_ref
    )

    # TODO correct vent_label TX id
    # Create the surface list by selecting the correct ones
    if self.magnet_0 and self.magnet_1 and self.W1 > 0:
        surf_list = [S1, S2, S3, S6, S5, S4]
    elif self.magnet_0 and self.magnet_1 and self.W1 == 0:
        surf_list = [S1, S2, S7, S5, S4]
    # elif self.magnet_0 and not self.magnet_1 and self.W1 > 0:
    #     surf_list = [S1, S2, S3, S9]
    # elif self.magnet_0 and not self.magnet_1 and self.W1 == 0:
    #     surf_list = [S1, S2, S10]
    # elif not self.magnet_0 and self.magnet_1 and self.W1 > 0:
    #     surf_list = [S8, S6, S5, S4]
    # elif not self.magnet_0 and self.magnet_1 and self.W1 == 0:
    #     surf_list = [S11, S5, S4]
    elif not self.magnet_0 and not self.magnet_1 and self.W1 > 0:
        surf_list = [S8, S9]
    elif not self.magnet_0 and not self.magnet_1 and self.W1 == 0:
        surf_list = [S12]
    else:
        raise Exception("Not implemented Yet")

    # Apply the transformations
    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)

    return surf_list
Пример #27
0
def build_geometry_wind(self,
                        Nrad,
                        Ntan,
                        is_simplified=False,
                        alpha=0,
                        delta=0):
    """Split the slot winding area in several zone

    Parameters
    ----------
    self : SlotW15
        A SlotW15 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

    """
    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"
    [
        Z13,
        Z12,
        Z11,
        Z10,
        Z9,
        Z8,
        Z7,
        Z6,
        Z5,
        Z4,
        Z3,
        Z2,
        Z1,
    ] = self._comp_point_coordinate()

    Ztan1 = (Z2 + Z12) / 2.0
    Ztan2 = Z7
    Zmid = (Ztan1 + Ztan2) / 2.0

    # Zrad1 between Z10 and Z9
    x = fsolve(lambda x: angle((Z10 - (Zmid + 1j * x)) / (Z10 - Z9)), -self.R1)
    Zrad1 = Zmid + 1j * x[0]
    Zrad2 = Zrad1.conjugate()

    # We can split in rad only if Zrad1 is between Z10 and Z9
    is_rad_splittable = Z10.real < Zrad1.real and Zrad1.real < Z9.real

    # Creation of curve
    surf_list = list()
    if Nrad == 1 and Ntan == 2:
        if is_simplified:
            # Part 1 (0,0)

            line1 = Segment(Z12, Ztan1)
            line2 = Segment(Ztan1, Ztan2)
            point_ref = (Z12 + Ztan1 + Ztan2 + Z8 + Z9 + Z10 + Z11) / 7
            surface = SurfLine(
                line_list=[line1, line2],
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)

            # Part2 (0,1)

            line1 = Segment(Ztan1, Z2)
            point_ref = (Ztan1 + Z2 + Z3 + Z4 + Z5 + Z6 + Ztan2) / 7
            surface = SurfLine(line_list=[line1],
                               label="Wind" + st + "_R0_T1_S0",
                               point_ref=point_ref)
            surf_list.append(surface)
        else:
            # Part 1 (0,0)

            line1 = Segment(Z12, Ztan1)
            line2 = Segment(Ztan1, Ztan2)
            line3 = Arc1(Ztan2, Z8, -abs(Z7))
            line4 = Arc1(Z8, Z9, -self.R2)
            line5 = Segment(Z9, Z10)
            line6 = Arc1(Z10, Z11, -self.R1)
            line7 = Segment(Z11, Z12)
            point_ref = (Z12 + Ztan1 + Ztan2 + Z8 + Z9 + Z10 + Z11) / 7
            surface = SurfLine(
                line_list=[line1, line2, line3, line4, line5, line6, line7],
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)

            # Part2 (0,1)

            line1 = Segment(Ztan1, Z2)
            line2 = Segment(Z2, Z3)
            line3 = Arc1(Z3, Z4, -self.R1)
            line4 = Segment(Z4, Z5)
            line5 = Arc1(Z5, Z6, -self.R2)
            line6 = Arc1(Z6, Ztan2, -abs(Z7))
            point_ref = (Ztan1 + Z2 + Z3 + Z4 + Z5 + Z6 + Ztan2) / 7
            line7 = Segment(Ztan2, Ztan1)
            surface = SurfLine(
                line_list=[line1, line2, line3, line4, line5, line6, line7],
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)

    elif Nrad == 2 and Ntan == 1 and is_rad_splittable:
        if is_simplified:
            # Part 1 (0,0)
            line1 = Segment(Z12, Z2)
            line2 = Segment(Zrad1, Zrad2)
            point_ref = (Z12 + Z2 + Z3 + Z4 + Zrad2 + Zrad1 + Z10 + Z11) / 8
            surface = SurfLine(
                line_list=[line1, line2],
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)

            point_ref = (Zrad1 + Zrad2 + Z5 + Z6 + Z8 + Z9) / 6
            surface = SurfLine(line_list=[],
                               label="Wind" + st + "_R1_T0_S0",
                               point_ref=point_ref)
            surf_list.append(surface)
        else:

            # Part 1 (0,0)

            line1 = Segment(Z12, Z2)
            line2 = Segment(Z2, Z3)
            line3 = Arc1(Z3, Z4, -self.R1)
            line4 = Segment(Z4, Zrad2)
            line5 = Segment(Zrad2, Zrad1)
            line6 = Segment(Zrad1, Z10)
            line7 = Arc1(Z10, Z11, -self.R1)
            line8 = Segment(Z11, Z12)
            point_ref = (Z12 + Z2 + Z3 + Z4 + Zrad2 + Zrad1 + Z10 + Z11) / 8
            surface = SurfLine(
                line_list=[
                    line1, line2, line3, line4, line5, line6, line7, line8
                ],
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)
            line1 = Segment(Zrad1, Zrad2)
            line2 = Segment(Zrad2, Z5)
            line3 = Arc1(Z5, Z6, -self.R2)
            line4 = Arc1(Z6, Z8, -abs(Z7))
            line5 = Arc1(Z8, Z9, -self.R2)
            line6 = Segment(Z9, Zrad1)
            point_ref = (Zrad1 + Zrad2 + Z5 + Z6 + Z8 + Z9) / 6
            surface = SurfLine(
                line_list=[line1, line2, line3, line4, line5, line6, line7],
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
    elif Nrad == 2 and Ntan == 2 and is_rad_splittable:
        if is_simplified:
            # Part 1 (0,0)

            line1 = Segment(Z12, Ztan1)
            line2 = Segment(Ztan1, Zmid)
            line3 = Segment(Zmid, Zrad1)
            line4 = Segment(Zrad1, Z10)
            line5 = Arc1(Z10, Z11, -self.R1)
            line6 = Segment(Z11, Z12)
            point_ref = (Z12 + Ztan1 + Zmid + Zrad1 + Z10 + Z11) / 6
            surface = SurfLine(
                line_list=[line1, line2, line3, line4, line5, line6],
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)

            line2 = Segment(Zmid, Ztan2)
            line3 = Arc1(Ztan2, Z8, -abs(Z7))
            line4 = Arc1(Z8, Z9, -self.R2)
            line5 = Segment(Z9, Zrad1)
            point_ref = (Zrad1 + Zmid + Ztan2 + Z8 + Z9) / 5
            line1 = Segment(Zrad1, Zmid)
            surface = SurfLine(
                line_list=[line1, line2, line3, line4, line5],
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)

            # Part 3 (0,1)
            line1 = Segment(Ztan1, Z2)
            line2 = Segment(Z2, Z3)
            line3 = Arc1(Z3, Z4, -self.R1)
            line4 = Segment(Z4, Zrad2)
            line5 = Segment(Zrad2, Zmid)
            line6 = Segment(Zmid, Ztan1)
            point_ref = (Ztan1 + Z2 + Z3 + Z4 + Zrad2 + Zmid) / 6
            surface = SurfLine(
                line_list=[line1, line2, line3, line4, line5, line6],
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)

            # Part4 (1,1)
            line1 = Segment(Zmid, Zrad2)
            line2 = Segment(Zrad2, Z5)
            line3 = Arc1(Z5, Z6, -self.R2)
            line4 = Arc1(Z6, Ztan2, -abs(Z7))
            line5 = Segment(Ztan2, Zmid)

            point_ref = (Zmid + Zrad2 + Z5 + Z6 + Ztan2) / 5
            surface = SurfLine(
                line_list=[line1, line2, line3, line4, line5],
                label="Wind" + st + "_R1_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
        else:

            # Part 1 (0,0)

            line1 = Segment(Z12, Ztan1)
            line2 = Segment(Ztan1, Zmid)
            line3 = Segment(Zmid, Zrad1)
            line4 = Segment(Zrad1, Z10)
            line5 = Arc1(Z10, Z11, -self.R1)
            line6 = Segment(Z11, Z12)
            point_ref = (Z12 + Ztan1 + Zmid + Zrad1 + Z10 + Z11) / 6
            surface = SurfLine(
                line_list=[line1, line2, line3, line4, line5, line6],
                label="Wind" + st + "_R0_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
            # Part2 (1,0)

            line2 = Segment(Zmid, Ztan2)
            line3 = Arc1(Ztan2, Z8, -abs(Z7))
            line4 = Arc1(Z8, Z9, -self.R2)
            line5 = Segment(Z9, Zrad1)
            point_ref = (Zrad1 + Zmid + Ztan2 + Z8 + Z9) / 5
            line1 = Segment(Zrad1, Zmid)
            surface = SurfLine(
                line_list=[line1, line2, line3, line4, line5],
                label="Wind" + st + "_R1_T0_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)

            # Part 3 (0,1)
            line1 = Segment(Ztan1, Z2)
            line2 = Segment(Z2, Z3)
            line3 = Arc1(Z3, Z4, -self.R1)
            line4 = Segment(Z4, Zrad2)
            line5 = Segment(Zrad2, Zmid)
            line6 = Segment(Zmid, Ztan1)
            point_ref = (Ztan1 + Z2 + Z3 + Z4 + Zrad2 + Zmid) / 6
            surface = SurfLine(
                line_list=[line1, line2, line3, line4, line5, line6],
                label="Wind" + st + "_R0_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)

            # Part4 (1,1)
            line1 = Segment(Zmid, Zrad2)
            line2 = Segment(Zrad2, Z5)
            line3 = Arc1(Z5, Z6, -self.R2)
            line4 = Arc1(Z6, Ztan2, -abs(Z7))
            line5 = Segment(Ztan2, Zmid)

            point_ref = (Zmid + Zrad2 + Z5 + Z6 + Ztan2) / 5
            surface = SurfLine(
                line_list=[line1, line2, line3, line4, line5],
                label="Wind" + st + "_R1_T1_S0",
                point_ref=point_ref,
            )
            surf_list.append(surface)
    else:  # Default : only one zone
        curve_list = self.build_geometry()
        # Remove the isthmus part
        curve_list = curve_list[1:-1]
        # Add a line to close the winding area
        lines = [Segment(curve_list[-1].end, curve_list[0].begin)]
        lines.extend(curve_list)
        surface = SurfLine(line_list=lines,
                           label="Wind" + st + "_R0_T0_S0",
                           point_ref=Zmid)
        surf_list.append(surface)
    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)

    return surf_list
Пример #28
0
def build_geometry(self, alpha=0, delta=0, is_simplified=False):
    """Compute the curve (Line) needed to plot the Slot.
    The ending point of a curve is the starting point of the next curve in
    the list

    Parameters
    ----------
    self : HoleM52
        A HoleM52 object
    alpha : float
        Angle to rotate the slot (Default value = 0) [rad]
    delta : complex
        Complex to translate the slot (Default value = 0)
    is_simplified : bool
       True to avoid line superposition

    Returns
    -------
    surf_list: list
        List of SurfLine needed to draw the HoleM51

    """
    if self.get_is_stator():  # check if the slot is on the stator
        st = "_Stator"
    else:
        st = "_Rotor"
    Rbo = self.get_Rbo()

    alpha1 = self.comp_alpha()
    Z1 = (Rbo - self.H0) * exp(1j * alpha1 / 2)
    Z9 = (Rbo - self.H0) * exp(-1j * alpha1 / 2)

    Z0 = (Z1 + Z9) / 2
    Z5 = Z0 - self.H1

    Z4 = Z5 + 1j * self.W0 / 2
    Z6 = Z4.conjugate()

    Z3 = Z4 + self.H2
    Z7 = Z3.conjugate()

    W1 = self.comp_W1()
    Z2 = Z3 + 1j * W1
    Z8 = Z2.conjugate()

    Z11 = Z3 + (self.H1 - self.H2)
    Z10 = Z7 + (self.H1 - self.H2)

    # Creation of the air curve
    curve_list_air = list()
    curve_list_air.append(Segment(Z1, Z2))
    curve_list_air.append(Segment(Z2, Z3))
    curve_list_air.append(Segment(Z3, Z11))
    curve_list_air.append(Segment(Z11, Z1))
    point_ref = (Z1 + Z2 + Z3 + Z11) / 4
    S1 = SurfLine(line_list=curve_list_air,
                  label="Hole" + st,
                  point_ref=point_ref)

    # Creation of the magnet curve
    curve_list_mag = list()
    if is_simplified:
        curve_list_mag.append(Segment(Z3, Z11))
        curve_list_mag.append(Segment(Z7, Z10))
    else:
        curve_list_mag.append(Segment(Z4, Z11))
        curve_list_mag.append(Segment(Z11, Z10))
        curve_list_mag.append(Segment(Z10, Z6))
        curve_list_mag.append(Segment(Z6, Z4))
    point_ref = (Z11 + Z4 + Z6 + Z10) / 4
    # Defining type of magnetization of the magnet
    if self.magnet_0:
        if self.magnet_0.type_magnetization == 0:
            type_mag = "_Radial"
        else:
            type_mag = "_Parallel"
    else:
        type_mag = "None"
    magnet_label = "HoleMagnet" + st + type_mag + "_N_R0_T0_S0"
    S2 = SurfLine(line_list=curve_list_mag,
                  label=magnet_label,
                  point_ref=point_ref)

    # Creation of the second air curve
    curve_list_air = list()
    curve_list_air.append(Segment(Z7, Z8))
    curve_list_air.append(Segment(Z8, Z9))
    curve_list_air.append(Segment(Z9, Z10))
    curve_list_air.append(Segment(Z10, Z7))
    point_ref = (Z7 + Z8 + Z9 + Z10) / 4
    S3 = SurfLine(line_list=curve_list_air,
                  label="Hole" + st,
                  point_ref=point_ref)

    # Area with no magnet (S1 + S2 + S3)
    curve_list_air = list()
    curve_list_air.append(Segment(Z1, Z2))
    curve_list_air.append(Segment(Z2, Z3))
    if self.H2 > 0:
        curve_list_air.append(Segment(Z3, Z4))
    curve_list_air.append(Segment(Z4, Z6))
    if self.H2 > 0:
        curve_list_air.append(Segment(Z6, Z7))
    curve_list_air.append(Segment(Z7, Z8))
    curve_list_air.append(Segment(Z8, Z9))
    curve_list_air.append(Segment(Z9, Z1))
    point_ref = (Z11 + Z4 + Z6 + Z10) / 4
    S4 = SurfLine(line_list=curve_list_air,
                  label="Hole" + st,
                  point_ref=point_ref)

    if self.magnet_0:
        S1.label = S1.label + "_R0_T0_S0"  # Hole
        S3.label = S3.label + "_R0_T1_S0"  # Hole
        surf_list = [S1, S2, S3]
    else:
        S4.label = S4.label + "_R0_T0_S0"  # Hole
        surf_list = [S4]

    # Apply the transformations
    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)

    return surf_list
Пример #29
0
def build_geometry(self, alpha=0, delta=0, is_simplified=False):
    """Compute the curve (Segment) needed to plot the Hole.
    The ending point of a curve is the starting point of the next curve in the
    list

    Parameters
    ----------
    self : HoleM53
        A HoleM53 object
    alpha : float
        Angle to rotate the slot (Default value = 0) [rad]
    delta : complex
        Complex to translate the slot (Default value = 0)
    is_simplified : bool
       True to avoid line superposition

    Returns
    -------
    surf_list: list
        List of Magnet Surface and Air Surface on the slot

    """
    if self.get_is_stator():  # check if the slot is on the stator
        st = "S"
    else:
        st = "R"
    Rbo = self.get_Rbo()

    Z7 = Rbo - self.H0 - 1j * self.W1 / 2
    Z6 = Z7 - 1j * (self.H2 - self.H3) * cos(self.W4)
    Z8 = Z7 + (self.H2 - self.H3) * sin(self.W4)

    # Compute the coordinate in the ref of Z6 with rotation -W4
    Z5 = self.W2 * exp(-1j * self.W4) + Z6
    Z4 = (self.W2 - 1j * self.H3) * exp(-1j * self.W4) + Z6
    Z3 = (self.W2 + self.W3 - 1j * self.H3) * exp(-1j * self.W4) + Z6
    Z2 = (self.W2 + self.W3) * exp(-1j * self.W4) + Z6
    Z9 = (self.W2 + 1j * (self.H2 - self.H3)) * exp(-1j * self.W4) + Z6
    Z10 = (self.W2 + self.W3 + 1j *
           (self.H2 - self.H3)) * exp(-1j * self.W4) + Z6

    # Z1 and Z11 are defined as intersection between line and circle
    Zlist = inter_line_circle(Z8, Z10, Rbo - self.H1)
    if len(Zlist) == 2 and Zlist[0].imag < 0 and Zlist[0].real > 0:
        Z11 = Zlist[0]
    elif len(Zlist) == 2 and Zlist[1].imag < 0 and Zlist[1].real > 0:
        Z11 = Zlist[1]
    else:
        raise Slot53InterError("ERROR: Slot 53, Can't find Z11 coordinates")

    Zlist = inter_line_circle(Z2, Z6, Rbo - self.H1)
    if len(Zlist) == 2 and Zlist[0].imag < 0 and Zlist[0].real > 0:
        Z1 = Zlist[0]
    elif len(Zlist) == 2 and Zlist[1].imag < 0 and Zlist[1].real > 0:
        Z1 = Zlist[1]
    else:
        raise Slot53InterError("ERROR: Slot 53, Can't find Z1 coordinates")

    # Symmetry
    Z1s = Z1.conjugate()
    Z2s = Z2.conjugate()
    Z3s = Z3.conjugate()
    Z4s = Z4.conjugate()
    Z5s = Z5.conjugate()
    Z6s = Z6.conjugate()
    Z7s = Z7.conjugate()
    Z8s = Z8.conjugate()
    Z9s = Z9.conjugate()
    Z10s = Z10.conjugate()
    Z11s = Z11.conjugate()

    # Air surface with magnet_0
    curve_list_air = list()
    curve_list_air.append(Segment(Z1, Z2))
    curve_list_air.append(Segment(Z2, Z10))
    curve_list_air.append(Segment(Z10, Z11))
    curve_list_air.append(Arc1(Z11, Z1, -Rbo + self.H1))
    point_ref = (Z1 + Z2 + Z10 + Z11) / 4
    S1 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # magnet_0 surface
    curve_list_mag = list()
    if is_simplified:
        curve_list_air.append(Segment(Z5, Z9))
        curve_list_air.append(Segment(Z2, Z10))
    else:
        curve_list_mag.append(Segment(Z3, Z4))
        curve_list_mag.append(Segment(Z4, Z9))
        curve_list_mag.append(Segment(Z9, Z10))
        curve_list_mag.append(Segment(Z10, Z3))
    point_ref = (Z3 + Z4 + Z9 + Z10) / 4
    S2 = SurfLine(
        line_list=curve_list_mag,
        label="Magnet" + st + "_N_R0_T0_S0",
        point_ref=point_ref,
    )

    # Air suface with magnet_0 and W1 > 0
    curve_list_air = list()
    if self.W2 > 0:
        curve_list_air.append(Segment(Z5, Z6))
    curve_list_air.append(Segment(Z6, Z7))
    curve_list_air.append(Segment(Z7, Z8))
    if self.W2 > 0:
        curve_list_air.append(Segment(Z8, Z9))
        curve_list_air.append(Segment(Z9, Z5))
        point_ref = (Z5 + Z6 + Z7 + Z8 + Z9) / 5
    else:
        curve_list_air.append(Segment(Z8, Z6))
        point_ref = (Z6 + Z7 + Z8) / 3
    S3 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Air surface with magnet_1
    curve_list_air = list()
    curve_list_air.append(Segment(Z1s, Z2s))
    curve_list_air.append(Segment(Z2s, Z10s))
    curve_list_air.append(Segment(Z10s, Z11s))
    curve_list_air.append(Arc1(Z11s, Z1s, Rbo - self.H1))
    point_ref = (Z1s + Z2s + Z10s + Z11s) / 4
    S4 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # magnet_1 surface
    curve_list_mag = list()
    if is_simplified:
        curve_list_air.append(Segment(Z5s, Z9s))
        curve_list_air.append(Segment(Z2s, Z10s))
    else:
        curve_list_mag.append(Segment(Z3s, Z4s))
        curve_list_mag.append(Segment(Z4s, Z9s))
        curve_list_mag.append(Segment(Z9s, Z10s))
        curve_list_mag.append(Segment(Z10s, Z3s))
    point_ref = (Z3s + Z4s + Z9s + Z10s) / 4
    S5 = SurfLine(
        line_list=curve_list_mag,
        label="Magnet" + st + "_N_R0_T1_S0",
        point_ref=point_ref,
    )

    # Air suface with magnet_1 and W1 > 0
    curve_list_air = list()
    if self.W2 > 0:
        curve_list_air.append(Segment(Z5s, Z6s))
    curve_list_air.append(Segment(Z6s, Z7s))
    curve_list_air.append(Segment(Z7s, Z8s))
    if self.W2 > 0:
        curve_list_air.append(Segment(Z8s, Z9s))
        curve_list_air.append(Segment(Z9s, Z5s))
        point_ref = (Z5s + Z6s + Z7s + Z8s + Z9s) / 5
    else:
        curve_list_air.append(Segment(Z8s, Z6s))
        point_ref = (Z6s + Z7s + Z8s) / 3
    S6 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # Air with both magnet and W1 = 0
    curve_list_air = list()
    if self.W2 > 0:
        curve_list_air.append(Segment(Z5, Z6))
    curve_list_air.append(Segment(Z6, Z6s))
    if self.W2 > 0:
        curve_list_air.append(Segment(Z6s, Z5s))
    curve_list_air.append(Segment(Z5s, Z9s))
    if self.W2 > 0:
        curve_list_air.append(Segment(Z9s, Z8s))
        curve_list_air.append(Segment(Z8s, Z9))
    curve_list_air.append(Segment(Z9, Z5))
    point_ref = (Z6 + Z6s + Z8) / 3
    S7 = SurfLine(line_list=curve_list_air, label="Air", point_ref=point_ref)

    # first hole without magnet_0 and W1 > 0
    curve_list_mag = list()
    curve_list_mag.append(Segment(Z1, Z2))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z2, Z3))
    curve_list_mag.append(Segment(Z3, Z4))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z4, Z5))
    if self.W2 > 0:
        curve_list_mag.append(Segment(Z5, Z6))
    curve_list_mag.append(Segment(Z6, Z7))
    curve_list_mag.append(Segment(Z7, Z8))
    curve_list_mag.append(Segment(Z8, Z11))
    curve_list_air.append(Arc1(Z11, Z1, -Rbo + self.H1))
    point_ref = (Z3 + Z4 + Z9 + Z10) / 4
    S8 = SurfLine(line_list=curve_list_mag, label="Air", point_ref=point_ref)

    # second hole without magnet_1 and W1 > 0
    curve_list_mag = list()
    curve_list_mag.append(Segment(Z1s, Z2s))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z2s, Z3s))
    curve_list_mag.append(Segment(Z3s, Z4s))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z4s, Z5s))
    if self.W2 > 0:
        curve_list_mag.append(Segment(Z5s, Z6s))
    curve_list_mag.append(Segment(Z6s, Z7s))
    curve_list_mag.append(Segment(Z7s, Z8s))
    curve_list_mag.append(Segment(Z8s, Z11s))
    curve_list_air.append(Arc1(Z11s, Z1s, -Rbo + self.H1))
    point_ref = (Z3s + Z4s + Z9s + Z10s) / 4
    S9 = SurfLine(line_list=curve_list_mag, label="Air", point_ref=point_ref)

    # No magnet_1 and W1 = 0
    curve_list_mag = list()
    curve_list_mag.append(Segment(Z1s, Z2s))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z2s, Z3s))
    curve_list_mag.append(Segment(Z3s, Z4s))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z4s, Z5s))
    if self.W2 > 0:
        curve_list_mag.append(Segment(Z5s, Z6s))
    curve_list_mag.append(Segment(Z6s, Z6))
    if self.W2 > 0:
        curve_list_mag.append(Segment(Z6, Z5))
    curve_list_mag.append(Segment(Z5, Z9))
    if self.W2 > 0:
        curve_list_mag.append(Segment(Z9, Z8))
    curve_list_mag.append(Segment(Z8s, Z11s))
    curve_list_air.append(Arc1(Z11s, Z1s, -Rbo + self.H1))
    point_ref = (Z3s + Z4s + Z9s + Z10s) / 4
    S10 = SurfLine(line_list=curve_list_mag, label="Air", point_ref=point_ref)

    # No magnet_0 and W1 = 0
    curve_list_mag = list()
    curve_list_mag.append(Segment(Z1, Z2))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z2, Z3))
    curve_list_mag.append(Segment(Z3, Z4))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z4, Z5))
    if self.W2 > 0:
        curve_list_mag.append(Segment(Z5, Z6))
    curve_list_mag.append(Segment(Z6, Z6s))
    if self.W2 > 0:
        curve_list_mag.append(Segment(Z6s, Z5s))
    curve_list_mag.append(Segment(Z5s, Z9s))
    if self.W2 > 0:
        curve_list_mag.append(Segment(Z9s, Z8s))
    curve_list_mag.append(Segment(Z8, Z11))
    curve_list_air.append(Arc1(Z11, Z1, -Rbo + self.H1))
    point_ref = (Z3 + Z4 + Z9 + Z10) / 4
    S11 = SurfLine(line_list=curve_list_mag, label="Air", point_ref=point_ref)

    # No magnet and W1 = 0
    curve_list_mag = list()
    curve_list_air.append(Arc1(Z1, Z11, Rbo - self.H1))
    curve_list_mag.append(Segment(Z11, Z8))
    curve_list_mag.append(Segment(Z8, Z11s))
    curve_list_air.append(Arc1(Z11s, Z1s, Rbo - self.H1))
    curve_list_mag.append(Segment(Z1s, Z2s))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z2s, Z3s))
    curve_list_mag.append(Segment(Z3s, Z4s))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z4s, Z5s))
    if self.W2 > 0:
        curve_list_mag.append(Segment(Z5s, Z6s))
    curve_list_mag.append(Segment(Z6s, Z6))
    if self.W2 > 0:
        curve_list_mag.append(Segment(Z6, Z5))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z5, Z4))
    curve_list_mag.append(Segment(Z4, Z3))
    if self.H3 > 0:
        curve_list_mag.append(Segment(Z3, Z2))
    curve_list_mag.append(Segment(Z2, Z1))

    point_ref = (Z6 + Z8 + Z6s) / 3
    S12 = SurfLine(line_list=curve_list_mag, label="Air", point_ref=point_ref)

    # Create the surface list by selecting the correct ones
    if self.magnet_0 and self.magnet_1 and self.W1 > 0:
        surf_list = [S1, S2, S3, S6, S5, S4]
    elif self.magnet_0 and self.magnet_1 and self.W1 == 0:
        surf_list = [S1, S2, S7, S5, S4]
    elif self.magnet_0 and not self.magnet_1 and self.W1 > 0:
        surf_list = [S1, S2, S3, S9]
    elif self.magnet_0 and not self.magnet_1 and self.W1 == 0:
        surf_list = [S1, S2, S10]
    elif not self.magnet_0 and self.magnet_1 and self.W1 > 0:
        surf_list = [S8, S6, S5, S4]
    elif not self.magnet_0 and self.magnet_1 and self.W1 == 0:
        surf_list = [S11, S5, S4]
    elif not self.magnet_0 and not self.magnet_1 and self.W1 > 0:
        surf_list = [S8, S9]
    elif not self.magnet_0 and not self.magnet_1 and self.W1 == 0:
        surf_list = [S12]

    # Apply the transformation
    for surf in surf_list:
        surf.rotate(alpha)
        surf.translate(delta)

    return surf_list
Пример #30
0
def build_geometry(self, sym=1, alpha=0, delta=0, is_simplified=False):
    """Build the geometry of the LamHole object

    Parameters
    ----------
    self : LamHole
        The LamHole to build in surface
    sym : int
        Symmetry factor (1= full machine, 2= half of the machine...)
    alpha : float
        Angle for rotation [rad]
    delta : complex
        Complex value for translation
    is_simplified: bool
        True to avoid line superposition

    Returns
    -------
    surf_list : list
        list of surfaces needed to draw the lamination

    """
    # Lamination label
    if self.is_stator:
        label = "Lamination_Stator_"
    else:
        label = "Lamination_Rotor_"

    ref_point = (self.Rint + (self.Rext - self.Rint) / 2) * exp(1j * pi / sym)

    surf_list = list()
    # Lamination surface(s)
    if sym == 1:  # Complete lamination
        surf_list.append(
            Circle(radius=self.Rext, label=label + "Ext", point_ref=ref_point, center=0)
        )
        if self.Rint > 0:
            surf_list.append(
                Circle(radius=self.Rint, label=label + "Int", point_ref=0, center=0)
            )
    else:  # Symmetry lamination
        begin = self.Rext
        end = self.Rext * exp(1j * 2 * pi / sym)
        Z_begin = self.Rint
        Z_end = self.Rint * exp(1j * 2 * pi / sym)
        line_list = [
            Segment(Z_begin, begin),
            Arc1(begin, end, self.Rext),
            Segment(end, Z_end),
        ]
        if self.Rint > 0:
            line_list.append(Arc1(Z_end, Z_begin, -self.Rint))
        surf_list.append(
            SurfLine(line_list=line_list, label=label + "Ext", point_ref=ref_point)
        )

    # Holes surface(s)
    for hole in self.hole:
        Zh = hole.Zh
        assert (Zh % sym) == 0  # For now only
        angle = 2 * pi / Zh
        # Create the first hole surface(s)
        surf_hole = hole.build_geometry(alpha=pi / Zh)

        # Copy the hole for Zh / sym
        for ii in range(Zh // sym):
            for surf in surf_hole:
                new_surf = type(surf)(init_dict=surf.as_dict())
                # changing the hole reference number
                new_surf.label = new_surf.label[:-1] + str(ii)
                if "Magnet" in surf.label and ii % 2 != 0:  # if the surf is Magnet
                    # Changing the pole of the magnet
                    new_surf.label = new_surf.label[:-10] + "S" + new_surf.label[-9:]
                new_surf.rotate(ii * angle)
                surf_list.append(new_surf)

    # 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