예제 #1
0
def test_3ph_isolated_nodes():
    v_base = 110  # 110kV Base Voltage
    mva_base = 100  # 100 MVA
    net = pp.create_empty_network(sn_mva=mva_base)

    busn = pp.create_bus(net, vn_kv=v_base, name="busn", index=1)
    pp.create_bus(net, vn_kv=20., in_service=True, index=2, name="busx")
    busk = pp.create_bus(net, vn_kv=v_base, name="busk", index=5)
    busl = pp.create_bus(net, vn_kv=v_base, name="busl", index=6)
    pp.create_bus(net, vn_kv=20., in_service=False, index=3)
    busy = pp.create_bus(net, vn_kv=20., in_service=True, index=0, name="busy")

    pp.create_ext_grid(net, bus=busn, vm_pu=1.0, name="Grid Connection",
                       s_sc_max_mva=5000, rx_max=0.1)
    net.ext_grid["r0x0_max"] = 0.1
    net.ext_grid["x0x_max"] = 1.0
    pp.create_std_type(net, {"r0_ohm_per_km": 0.0848, "x0_ohm_per_km": 0.4649556,
                             "c0_nf_per_km": 230.6, "max_i_ka": 0.963,
                             "r_ohm_per_km": 0.0212, "x_ohm_per_km": 0.1162389,
                             "c_nf_per_km": 230}, "example_type")
    # Loads on supplied buses
    pp.create_asymmetric_load(net, busk, p_a_mw=50, q_a_mvar=50, p_b_mw=10, q_b_mvar=15,
                              p_c_mw=10, q_c_mvar=5)
    pp.create_load(net, bus=busl, p_mw=7, q_mvar=0.070, name="Load 1")
    # Loads on unsupplied buses
    pp.create_load(net, bus=busy, p_mw=70, q_mvar=70, name="Load Y")
    pp.create_line(net, from_bus=busn, to_bus=busk, length_km=50.0, std_type="example_type")
    pp.create_line(net, from_bus=busl, to_bus=busk, length_km=50.0, std_type="example_type")
    pp.add_zero_impedance_parameters(net)
    runpp_3ph_with_consistency_checks(net)
    assert net['converged']
    assert np.allclose(net.res_bus_3ph.T[[0, 2, 3]].T[["vm_a_pu", "va_a_degree", "vm_b_pu",
                       "va_b_degree", "vm_c_pu", "va_c_degree"]], np.nan, equal_nan=True)
    assert np.allclose(net.res_bus_3ph.T[[0, 2, 3]].T[["p_a_mw", "q_a_mvar", "p_b_mw", "q_b_mvar",
                       "p_c_mw", "q_c_mvar"]], 0.0)
예제 #2
0
def test_2trafos():
    net = pp.create_empty_network()
    make_nw(net, 10., 0., "wye", "YNyn")
    make_nw(net, 10., 0., "wye", "YNyn")
    runpp_3ph_with_consistency_checks(net)
    assert net['converged']
    assert np.allclose(net.res_ext_grid_3ph.iloc[0].values, net.res_ext_grid_3ph.iloc[1].values)
예제 #3
0
def test_3ph_bus_mapping_order():
    net = pp.create_empty_network()
    b2 = pp.create_bus(net, vn_kv=0.4, index=4)
    pp.create_bus(net, vn_kv=0.4, in_service=False, index=3)
    b1 = pp.create_bus(net, vn_kv=0.4, index=7)

    pp.create_ext_grid(net, b1, vm_pu=1.0, s_sc_max_mva=10, rx_max=0.1)
    net.ext_grid["x0x_max"] = 1.
    net.ext_grid["r0x0_max"] = 0.1
    pp.create_std_type(net, {"r_ohm_per_km": 0.1013, "x_ohm_per_km": 0.06911504,
                             "c_nf_per_km": 690, "g_us_per_km": 0, "max_i_ka": 0.44,
                             "c0_nf_per_km": 312.4, "r0_ohm_per_km": 0.4053,
                             "x0_ohm_per_km": 0.2764602}, "N2XRY 3x185sm 0.6/1kV")

    pp.create_line(net, b1, b2, 1.0, std_type="N2XRY 3x185sm 0.6/1kV", index=4)
    pp.create_line(net, b1, b2, 1.0, std_type="N2XRY 3x185sm 0.6/1kV", index=3, in_service=False)
    pp.create_line(net, b1, b2, 1.0, std_type="N2XRY 3x185sm 0.6/1kV", index=7)
    pp.add_zero_impedance_parameters(net)
    pp.create_load(net, b2, p_mw=0.030, q_mvar=0.030)
    pp.runpp(net)
    runpp_3ph_with_consistency_checks(net)
    assert net['converged']

    assert np.allclose(net.res_bus_3ph.vm_a_pu.values, net.res_bus.vm_pu.values, equal_nan=True)
    assert net.res_bus_3ph.index.tolist() == net.res_bus.index.tolist()

    assert net.res_line_3ph.index.tolist() == net.res_line.index.tolist()
    assert np.allclose(net.res_line.p_from_mw, net.res_line_3ph.p_a_from_mw +
                       net.res_line_3ph.p_b_from_mw +
                       net.res_line_3ph.p_c_from_mw)
    assert np.allclose(net.res_line.loading_percent, net.res_line_3ph.loading_a_percent)
예제 #4
0
def test_2bus_network_single_isolated_busses(net):
    # -o---o o x
    pp.create_bus(net, vn_kv=110)
    pp.create_bus(net, vn_kv=110, in_service=False)
    pp.add_zero_impedance_parameters(net)
    runpp_3ph_with_consistency_checks(net)
    assert net['converged']
    check_it(net)
예제 #5
0
def test_trafo_asym():
    nw_dir = os.path.abspath(os.path.join(pp.pp_dir, "test/loadflow"))
    for trafo_vector_group in ["YNyn", "Dyn", "Yzn"]:
        net = pp.from_json(nw_dir + '/runpp_3ph Validation.json')
        net['trafo'].vector_group = trafo_vector_group
        runpp_3ph_with_consistency_checks(net)
        assert net['converged']
        check_results(net, trafo_vector_group, get_PF_Results(trafo_vector_group))
예제 #6
0
def test_2bus_network_singel_oos_bus(net):
    # -o---x---o
    b1 = pp.create_bus(net, vn_kv=110)
    net.bus.loc[5, "in_service"] = False
    pp.create_line(net, from_bus=5, to_bus=b1, length_km=10.0, std_type="example_type")
    pp.create_asymmetric_load(net, b1, p_a_mw=-5, q_a_mvar=5, p_b_mw=-1, q_b_mvar=1.5,
                              p_c_mw=-1, q_c_mvar=.5)
    pp.add_zero_impedance_parameters(net)
    runpp_3ph_with_consistency_checks(net)
    assert net['converged']
예제 #7
0
def test_trafo_asym():
    results = get_PF_Results()  # Results taken out from PF
    for bushv in [10]:
        for tap_ps in [0]:
            for loadtyp in ["delta", "wye", "delta_wye", "bal_wye"]:
                for vc in ["YNyn", "Dyn", "Yzn"]:  # ,"Yyn"]:
                    net = pp.create_empty_network(sn_mva=100)
                    make_nw(net, bushv, tap_ps, loadtyp, vc)
                    runpp_3ph_with_consistency_checks(net)
                    assert net['converged']
                    check_results(net, vc, results[bushv][tap_ps][loadtyp][vc])
예제 #8
0
def test_2bus_network_isolated_net_part(net):
    # -o---o o---o
    b1 = pp.create_bus(net, vn_kv=110)
    b2 = pp.create_bus(net, vn_kv=110)
    pp.create_line(net, from_bus=b1, to_bus=b2, length_km=50.0, std_type="example_type")
    pp.create_asymmetric_load(net, b2, p_a_mw=50, q_a_mvar=50, p_b_mw=10, q_b_mvar=15,
                              p_c_mw=10, q_c_mvar=5)
    pp.add_zero_impedance_parameters(net)
    runpp_3ph_with_consistency_checks(net)
    assert net['converged']
    check_it(net)
예제 #9
0
def test_out_serv_load(net):
    # <-x--o------o
    pp.add_zero_impedance_parameters(net)
    runpp_3ph_with_consistency_checks(net)
    assert net['converged']
    check_it(net)
    pp.create_asymmetric_load(net, 5, p_a_mw=50, q_a_mvar=100, p_b_mw=29, q_b_mvar=38,
                              p_c_mw=10, q_c_mvar=5, in_service=False)
    runpp_3ph_with_consistency_checks(net)
    assert net['converged']
    check_it(net)
예제 #10
0
def test_3ph_two_bus_line_powerfactory():
    net = pp.create_empty_network()

    b1 = pp.create_bus(net, vn_kv=0.4)
    b2 = pp.create_bus(net, vn_kv=0.4)

    pp.create_ext_grid(net, b1, vm_pu=1.0, s_sc_max_mva=10, rx_max=0.1)
    net.ext_grid["x0x_max"] = 1.
    net.ext_grid["r0x0_max"] = 0.1
    pp.create_std_type(net, {"r_ohm_per_km": 0.1013, "x_ohm_per_km": 0.06911504,
                             "c_nf_per_km": 690, "g_us_per_km": 0, "max_i_ka": 0.44,
                             "c0_nf_per_km": 312.4, "r0_ohm_per_km": 0.4053,
                             "x0_ohm_per_km": 0.2764602}, "N2XRY 3x185sm 0.6/1kV")

    pp.create_line(net, b1, b2, 0.4, std_type="N2XRY 3x185sm 0.6/1kV")
    pp.add_zero_impedance_parameters(net)
    pp.create_load(net, b2, p_mw=0.010, q_mvar=0.010)
    pp.create_asymmetric_load(net, b2, p_a_mw=0.020, q_a_mvar=0.010, p_b_mw=0.015, q_b_mvar=0.005, p_c_mw=0.025,
                              q_c_mvar=0.010)
    runpp_3ph_with_consistency_checks(net)
    assert net['converged']

    bus_pp = np.abs(net.res_bus_3ph[['vm_a_pu', 'vm_b_pu', 'vm_c_pu']].values)
    bus_pf = np.abs(np.array([[0.99939853552, 1.0013885141, 0.99921580141],
                             [0.97401782343, 0.98945593737, 0.96329605983]]))

    assert np.max(np.abs(bus_pp-bus_pf)) < 4e-6

    line_pp = np.abs(net.res_line_3ph[
            ['i_a_from_ka', 'i_b_from_ka', 'i_c_from_ka',
             'i_a_to_ka', 'i_b_to_ka', 'i_c_to_ka',
             'p_a_from_mw', 'p_b_from_mw', 'p_c_from_mw',
             'q_a_from_mvar', 'q_b_from_mvar', 'q_c_from_mvar',
             'p_a_to_mw', 'p_b_to_mw', 'p_c_to_mw',
             'q_a_to_mvar', 'q_b_to_mvar', 'q_c_to_mvar']].values)
    line_pf = np.abs(np.array(
            [[0.11946088987	,	0.08812337783	,	0.14074226065	,
             0.1194708224	,	0.088131567331	,	0.14075063601	,
             0.023810539354	,	0.01855791658	,	0.029375192747	,
             0.013901720672	,	0.008421814704	,	0.013852398586	,
             -0.023333142958	,	-0.018333405987	,	-0.028331643666	,
             -0.013332756527	,	-0.008333413919	,	-0.013332422725	]]))
    assert np.max(np.abs(line_pp - line_pf)) < 1e-5

    line_load_pp = np.abs(net.res_line_3ph[
            ['loading_a_percent', 'loading_b_percent', 'loading_c_percent',
             'loading_percent']].values)
    line_load_pf = np.abs(np.array(
                          [[27.1525	,	20.0299	,	31.98878	,
                            31.98878]]))
    assert np.max(np.abs(line_load_pp - line_load_pf)) < 1e-2
예제 #11
0
def test_2bus_network(net):
    # -o---o
    pp.add_zero_impedance_parameters(net)
    runpp_3ph_with_consistency_checks(net)
    assert net['converged']
    check_it(net)
예제 #12
0
def test_4bus_network():
    v_base = 110  # 110kV Base Voltage
    mva_base = 100  # 100 MVA
    net = pp.create_empty_network(sn_mva=mva_base)
    # =============================================================================
    # Main Program
    # =============================================================================
    busn = pp.create_bus(net, vn_kv=v_base, name="busn")
    busk = pp.create_bus(net, vn_kv=v_base, name="busk")
    busm = pp.create_bus(net, vn_kv=v_base, name="busm")
    busp = pp.create_bus(net, vn_kv=v_base, name="busp")
    pp.create_ext_grid(net,
                       bus=busn,
                       vm_pu=1.0,
                       name="Grid Connection",
                       s_sc_max_mva=5000,
                       rx_max=0.1,
                       r0x0_max=0.1,
                       x0x_max=1.0)
    pp.create_std_type(
        net, {
            "r0_ohm_per_km": .154,
            "x0_ohm_per_km": 0.5277876,
            "c0_nf_per_km": 170.4,
            "max_i_ka": 0.741,
            "r_ohm_per_km": .0385,
            "x_ohm_per_km": 0.1319469,
            "c_nf_per_km": 170
        }, "example_type3")
    pp.create_line(net,
                   from_bus=busn,
                   to_bus=busm,
                   length_km=1.0,
                   std_type="example_type3")
    pp.create_line(net,
                   from_bus=busn,
                   to_bus=busp,
                   length_km=1.0,
                   std_type="example_type3")
    pp.create_line_from_parameters(net,
                                   from_bus=busn,
                                   to_bus=busk,
                                   length_km=1.0,
                                   r0_ohm_per_km=.1005,
                                   x0_ohm_per_km=0.4900884,
                                   c0_nf_per_km=200.5,
                                   max_i_ka=0.89,
                                   r_ohm_per_km=.0251,
                                   x_ohm_per_km=0.1225221,
                                   c_nf_per_km=210)
    pp.create_line_from_parameters(net,
                                   from_bus=busk,
                                   to_bus=busm,
                                   length_km=1.0,
                                   r0_ohm_per_km=0.0848,
                                   x0_ohm_per_km=0.4649556,
                                   c0_nf_per_km=230.6,
                                   max_i_ka=0.963,
                                   r_ohm_per_km=0.0212,
                                   x_ohm_per_km=0.1162389,
                                   c_nf_per_km=230)
    pp.create_line_from_parameters(net,
                                   from_bus=busk,
                                   to_bus=busp,
                                   length_km=1.0,
                                   r0_ohm_per_km=.3048,
                                   x0_ohm_per_km=0.6031856,
                                   c0_nf_per_km=140.3,
                                   max_i_ka=0.531,
                                   r_ohm_per_km=.0762,
                                   x_ohm_per_km=0.1507964,
                                   c_nf_per_km=140)
    pp.add_zero_impedance_parameters(net)

    pp.create_asymmetric_load(net,
                              busk,
                              p_a_mw=50,
                              q_a_mvar=20,
                              p_b_mw=80,
                              q_b_mvar=60,
                              p_c_mw=20,
                              q_c_mvar=5)
    pp.create_asymmetric_load(net,
                              busm,
                              p_a_mw=50,
                              q_a_mvar=50,
                              p_b_mw=10,
                              q_b_mvar=15,
                              p_c_mw=10,
                              q_c_mvar=5)
    pp.create_asymmetric_load(net,
                              busp,
                              p_a_mw=50,
                              q_a_mvar=20,
                              p_b_mw=60,
                              q_b_mvar=20,
                              p_c_mw=10,
                              q_c_mvar=5)
    runpp_3ph_with_consistency_checks(net)
    assert net['converged']

    bus_pp = np.abs(net.res_bus_3ph[[
        'vm_a_pu', 'vm_b_pu', 'vm_c_pu'
    ]][~np.isnan(net.res_bus_3ph.vm_a_pu)].values)
    bus_pf = np.abs(
        np.array([[0.98085729, 0.97711997, 1.04353786],
                  [0.97828577, 0.97534651, 1.04470864],
                  [0.97774307, 0.97648197, 1.04421233],
                  [0.9780892, 0.97586805, 1.04471106]]))
    assert np.max(np.abs(bus_pp - bus_pf)) < 1e-8

    line_pp = np.abs(net.res_line_3ph[[
        'i_a_from_ka', 'i_b_from_ka', 'i_c_from_ka', 'i_a_to_ka', 'i_b_to_ka',
        'i_c_to_ka', 'p_a_from_mw', 'p_b_from_mw', 'p_c_from_mw',
        'q_a_from_mvar', 'q_b_from_mvar', 'q_c_from_mvar', 'p_a_to_mw',
        'p_b_to_mw', 'p_c_to_mw', 'q_a_to_mvar', 'q_b_to_mvar', 'q_c_to_mvar',
        'loading_a_percent', 'loading_b_percent', 'loading_c_percent',
        'loading_percent'
    ]].values)
    line_pf = np.abs(
        np.array([[
            0.98898804851, 0.68943734, 0.19848961, 0.99093993, 0.69146384,
            0.19966503, 49.87434308, 33.86579548, 12.44659879, 36.16562613,
            26.14426519, 4.25746428, -49.75842138, -33.90236497, -12.45155362,
            -36.19862688, -26.25675246, -4.50384238, 133.730100000000,
            93.314960000000, 26.945350000000, 133.730100000000
        ],
                  [
                      0.87075816277, 1.03463205, 0.19072622, 0.87210779,
                      1.03599167, 0.19188991, 49.59359423, 58.53676842,
                      11.97553941, 21.96967200, 26.37559958, 4.04458873,
                      -49.47110289, -58.55284705, -11.98669516, -22.07474008,
                      -26.34476811, -4.29078447, 117.693400000000,
                      139.809900000000, 25.896070000000, 139.809900000000
                  ],
                  [
                      0.95760407055, 1.14786582, 0.24829126, 0.95975383,
                      1.15028040, 0.24975553, 50.87938854, 57.53628873,
                      15.54470531, 31.13888557, 41.99378843, 5.39758513,
                      -50.76249094, -57.56374777, -15.56099267, -31.28560646,
                      -41.99056453, -5.69609575, 107.837500000000,
                      129.245000000000, 28.062420000000, 129.245000000000
                  ],
                  [
                      0.21780921494, 0.42795803, 0.03706412, 0.22229619,
                      0.42603286, 0.03771703, 0.23292404, -23.88471674,
                      -2.45255095, 13.53037092, -11.49972060, 0.17971665,
                      -0.24157862, 23.90236497, 2.45155361, -13.80137312,
                      11.25675247, -0.49615762, 23.083720000000,
                      44.440090000000, 3.916618000000, 44.440090000000
                  ],
                  [
                      0.03712221482, 0.10766244, 0.03093505, 0.03446871,
                      0.10500386, 0.03179428, 0.52956690, 1.44846452,
                      -1.98645639, -2.24476446, -6.50971485, 0.51637910,
                      -0.52889712, -1.44715295, 1.98669515, 2.07474008,
                      6.34476812, -0.70921554, 6.991001000000, 20.275410000000,
                      5.987624000000, 20.275410000000
                  ]]))
    assert np.max(np.abs(line_pp - line_pf)) < 1e-4