def test_triplex_secondary():
    """
    Test against 1/0 AA triplex secondary cable from example 11.3 on page 463
    of 'Distribution System Modeling and Analysis' by William H.Kersting,
    4th edition.
    """
    conductor = {
        'resistance': (0.97 * (ohms / miles)).to('ohm / meters').magnitude,
        'gmr': (0.0111 * feet).to('meters').magnitude,
        'wire_positions': (0, 1),
    }
    insulation_thickness = 0.08  # inches
    phase_conductor = {
        **conductor,
        'outside_radius':
        ((0.368 / 2 + insulation_thickness) * inches).to('meters').magnitude,
    }
    neutral_conductor = {
        **conductor,
        'outside_radius': (0.368 / 2 * inches).to('meters').magnitude,
    }
    multi_line_model = MultiLineModel({
        'S1': phase_conductor,
        'S2': phase_conductor,
        'N': neutral_conductor
    })
    carsons_model = MultiConductorCarsonsEquations(multi_line_model)

    assert_array_almost_equal(
        calculate_impedance(carsons_model),
        array([[1.5304 + 1j * 0.6132, 0.5574 + 1j * 0.4461],
               [0.5574 + 1j * 0.4461, 1.5304 + 1j * 0.6132]]) *
        OHM_PER_MILE_TO_OHM_PER_METER,
        decimal=4)
def test_triplex_phased_cable():
    """
    Test against 3/0 triplex NS75 aluminum conductor cable.
    """
    phases = 'ABC'
    insulation_thickness = 0.00137  # meters
    phase_conductor = {
        'resistance': (0.611 * (ohms / miles)).to('ohm / meters').magnitude,
        'gmr': (0.014 * feet).to('meters').magnitude,
        'wire_positions': (0, 5),
        'outside_radius':
        ((0.464 / 2 * inches).to('meters').magnitude + insulation_thickness),
    }
    multi_line_model = MultiLineModel({ph: phase_conductor for ph in phases})
    carsons_model = MultiConductorCarsonsEquations(multi_line_model)

    assert_array_almost_equal(calculate_impedance(carsons_model),
                              array([[
                                  4.389e-4 + 1j * 9.200e-4,
                                  5.922e-5 + 1j * 8.277e-4,
                                  5.922e-5 + 1j * 8.277e-4
                              ],
                                     [
                                         5.922e-5 + 1j * 8.277e-4,
                                         4.389e-4 + 1j * 9.200e-4,
                                         5.922e-5 + 1j * 8.277e-4
                                     ],
                                     [
                                         5.922e-5 + 1j * 8.277e-4,
                                         5.922e-5 + 1j * 8.277e-4,
                                         4.389e-4 + 1j * 9.200e-4
                                     ]]),
                              decimal=4)
def test_multi_conductor_cable_with_neutral(phases, resistance, gmr,
                                            wire_position, core_radius,
                                            insulation_thickness,
                                            expected_result):
    conductor = {
        'resistance':
        (resistance * (ohms / miles)).to('ohm / meters').magnitude,
        'gmr': (gmr * feet).to('meters').magnitude,
        'wire_positions': wire_position,
    }
    phase_conductor = {
        **conductor,
        'outside_radius':
        ((core_radius * inches).to('meters').magnitude + insulation_thickness),
    }
    neutral_conductor = {
        **conductor,
        'outside_radius': (core_radius * inches).to('meters').magnitude,
    }

    line_model_dict = {ph: phase_conductor for ph in phases}
    line_model_dict.update({'N': neutral_conductor})

    multi_line_model = MultiLineModel(line_model_dict)
    carsons_model = MultiConductorCarsonsEquations(multi_line_model)

    assert_array_almost_equal(calculate_impedance(carsons_model),
                              expected_result,
                              decimal=4)
Example #4
0
def test_2ph_concentric_neutral_cable():
    """
    Validation test against OpenDSS example found in documentation
    http://svn.code.sf.net/p/electricdss/code/trunk/Distrib/Doc/
    'TechNote CableModelling.pdf' - Practical Example: Concentric Neutral Cable
    """

    model = ConcentricNeutralCarsonsEquations(
        ConcentricLineModel({
            "A": {
                'resistance':
                (0.0776 * (ohms / kft)).to('ohm / meters').magnitude,
                'gmr': (0.205 * inches).to('meters').magnitude,
                'wire_positions': (0, 0)
            },
            "B": {
                'resistance':
                (0.0776 * (ohms / kft)).to('ohm / meters').magnitude,
                'gmr': (0.205 * inches).to('meters').magnitude,
                'wire_positions': ((6 * inches).to('meters').magnitude, 0)
            },
            "NA": {
                'neutral_strand_gmr':
                (0.02496 * inches).to('meters').magnitude,
                'neutral_strand_resistance':
                (2.55 * (ohms / kft)).to('ohm / meters').magnitude,
                'neutral_strand_diameter':
                (0.064 * inches).to('meters').magnitude,
                'diameter_over_neutral':
                (1.29 * inches).to('meters').magnitude,
                'neutral_strand_count':
                13,
            },
            "NB": {
                'neutral_strand_gmr':
                (0.02496 * inches).to('meters').magnitude,
                'neutral_strand_resistance':
                (2.55 * (ohms / kft)).to('ohm / meters').magnitude,
                'neutral_strand_diameter':
                (0.064 * inches).to('meters').magnitude,
                'diameter_over_neutral':
                (1.29 * inches).to('meters').magnitude,
                'neutral_strand_count':
                13,
            },
        }))

    assert_array_almost_equal(
        calculate_impedance(model),
        array([
            [0.867953 + 1j * 0.442045, 0.389392 + 1j * 0.0511399, 0 + 1j * 0],
            [0.389392 + 1j * 0.0511399, 0.867953 + 1j * 0.442045, 0 + 1j * 0],
            [0 + 1j * 0, 0 + 1j * 0, 0 + 1j * 0],
        ]) * OHM_PER_MILE_TO_OHM_PER_METER,
        decimal=4)
Example #5
0
def test_concentric_neutral_cable_IEEE37():
    """
    Validation test against IEEE37 network underground cable configuration 723.
    """

    model = ConcentricNeutralCarsonsEquations(
        ConcentricLineModel({
            "A": {
                'resistance':
                (0.7690 * (ohms / miles)).to('ohm / meters').magnitude,
                'gmr': (0.0125 * feet).to('meters').magnitude,
                'wire_positions': (0, 0)
            },
            "B": {
                'resistance':
                (0.7690 * (ohms / miles)).to('ohm / meters').magnitude,
                'gmr': (0.0125 * feet).to('meters').magnitude,
                'wire_positions': ((6 * inches).to('meters').magnitude, 0)
            },
            "C": {
                'resistance':
                (0.7690 * (ohms / miles)).to('ohm / meters').magnitude,
                'gmr': (0.0125 * feet).to('meters').magnitude,
                'wire_positions': ((12 * inches).to('meters').magnitude, 0)
            },
            "NA": {
                'neutral_strand_gmr': (0.00208 * feet).to('meters').magnitude,
                'neutral_strand_resistance':
                (14.87 * ohms / miles).to('ohm / meters').magnitude,
                'neutral_strand_diameter':
                (0.0641 * inches).to('meters').magnitude,
                'diameter_over_neutral':
                (1.10 * inches).to('meters').magnitude,
                'neutral_strand_count':
                7,
            },
            "NB": {
                'neutral_strand_gmr': (0.00208 * feet).to('meters').magnitude,
                'neutral_strand_resistance':
                (14.87 * ohms / miles).to('ohm / meters').magnitude,
                'neutral_strand_diameter':
                (0.0641 * inches).to('meters').magnitude,
                'diameter_over_neutral':
                (1.10 * inches).to('meters').magnitude,
                'neutral_strand_count':
                7,
            },
            "NC": {
                'neutral_strand_gmr': (0.00208 * feet).to('meters').magnitude,
                'neutral_strand_resistance':
                (14.87 * ohms / miles).to('ohm / meters').magnitude,
                'neutral_strand_diameter':
                (0.0641 * inches).to('meters').magnitude,
                'diameter_over_neutral':
                (1.10 * inches).to('meters').magnitude,
                'neutral_strand_count':
                7,
            },
        }))

    assert_array_almost_equal(
        calculate_impedance(model),
        array([
            [1.2936 + 1j * 0.6713, 0.4871 + 1j * 0.2111, 0.4585 + 1j * 0.1521],
            [0.4871 + 1j * 0.2111, 1.3022 + 1j * 0.6326, 0.4871 + 1j * 0.2111],
            [0.4585 + 1j * 0.1521, 0.4871 + 1j * 0.2111, 1.2936 + 1j * 0.6713],
        ]) * OHM_PER_MILE_TO_OHM_PER_METER,
        decimal=4)
Example #6
0
def test_concentric_neutral_cable():
    """
    Validation test against example in Kersting's book.
    """
    model = ConcentricNeutralCarsonsEquations(
        ConcentricLineModel({
            "A": {
                'resistance':
                (0.4100 * (ohms / miles)).to('ohm / meters').magnitude,
                'gmr': (0.0171 * feet).to('meters').magnitude,
                'wire_positions': (0, 0)
            },
            "B": {
                'resistance':
                (0.4100 * (ohms / miles)).to('ohm / meters').magnitude,
                'gmr': (0.0171 * feet).to('meters').magnitude,
                'wire_positions': ((6 * inches).to('meters').magnitude, 0)
            },
            "C": {
                'resistance':
                (0.4100 * (ohms / miles)).to('ohm / meters').magnitude,
                'gmr': (0.0171 * feet).to('meters').magnitude,
                'wire_positions': ((12 * inches).to('meters').magnitude, 0)
            },
            "NA": {
                'neutral_strand_gmr': (0.00208 * feet).to('meters').magnitude,
                'neutral_strand_resistance':
                (14.87 * ohms / miles).to('ohm / meters').magnitude,
                'neutral_strand_diameter':
                (0.0641 * inches).to('meters').magnitude,
                'diameter_over_neutral':
                (1.29 * inches).to('meters').magnitude,
                'neutral_strand_count':
                13,
            },
            "NB": {
                'neutral_strand_gmr': (0.00208 * feet).to('meters').magnitude,
                'neutral_strand_resistance':
                (14.87 * ohms / miles).to('ohm / meters').magnitude,
                'neutral_strand_diameter':
                (0.0641 * inches).to('meters').magnitude,
                'diameter_over_neutral':
                (1.29 * inches).to('meters').magnitude,
                'neutral_strand_count':
                13,
            },
            "NC": {
                'neutral_strand_gmr': (0.00208 * feet).to('meters').magnitude,
                'neutral_strand_resistance':
                (14.87 * ohms / miles).to('ohm / meters').magnitude,
                'neutral_strand_diameter':
                (0.0641 * inches).to('meters').magnitude,
                'diameter_over_neutral':
                (1.29 * inches).to('meters').magnitude,
                'neutral_strand_count':
                13,
            },
        }))

    assert_array_almost_equal(
        calculate_impedance(model),
        array([
            [0.7981 + 1j * 0.4467, 0.3188 + 1j * 0.0334, 0.2848 + 1j * 0.0138],
            [0.3188 + 1j * 0.0334, 0.7890 + 1j * 0.4048, 0.3188 + 1j * 0.0334],
            [0.2848 + 1j * 0.0138, 0.3188 + 1j * 0.0334, 0.7981 + 1j * 0.4467],
        ]) * OHM_PER_MILE_TO_OHM_PER_METER,
        decimal=4)