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)
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)
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)
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)