Пример #1
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)
Пример #2
0
def test_find_line_type():
    net = pp.create_empty_network()
    c = 40000
    r = 1.5
    x = 2.0
    i = 10
    name = "test_line1"
    typdata = {
        "c_nf_per_km": c,
        "r_ohm_per_km": r,
        "x_ohm_per_km": x,
        "max_i_ka": i
    }
    pp.create_std_type(net, data=typdata, name=name, element="line")
    fitting_type = pp.find_std_type_by_parameter(net, typdata)
    assert len(fitting_type) == 1
    assert fitting_type[0] == name

    fitting_type = pp.find_std_type_by_parameter(net,
                                                 {"r_ohm_per_km": r + 0.05},
                                                 epsilon=.06)
    assert len(fitting_type) == 1
    assert fitting_type[0] == name

    fitting_type = pp.find_std_type_by_parameter(net,
                                                 {"r_ohm_per_km": r + 0.07},
                                                 epsilon=.06)
    assert len(fitting_type) == 0
Пример #3
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)
Пример #4
0
def test_create_and_load_std_type_line():
    net = pp.create_empty_network()
    c = 40
    r = 0.01
    x = 0.02
    i = 0.2
    name = "test_line"

    typdata = {}
    with pytest.raises(UserWarning):
        pp.create_std_type(net, name=name, data=typdata, element="line")

    typdata = {"c_nf_per_km": c}
    with pytest.raises(UserWarning):
        pp.create_std_type(net, name=name, data=typdata, element="line")

    typdata = {"c_nf_per_km": c, "r_ohm_per_km": r}
    with pytest.raises(UserWarning):
        pp.create_std_type(net, name=name, data=typdata, element="line")

    typdata = {"c_nf_per_km": c, "r_ohm_per_km": r, "x_ohm_per_km": x}
    with pytest.raises(UserWarning):
        pp.create_std_type(net, name=name, data=typdata, element="line")

    typdata = {
        "c_nf_per_km": c,
        "r_ohm_per_km": r,
        "x_ohm_per_km": x,
        "max_i_ka": i
    }
    pp.create_std_type(net, name=name, data=typdata, element="line")
    assert net.std_types["line"][name] == typdata

    loaded_type = pp.load_std_type(net, name)
    assert loaded_type == typdata
Пример #5
0
def test_change_type_line():
    net = pp.create_empty_network()
    r1 = 0.01
    x1 = 0.02
    c1 = 40
    i1 = 0.2
    name1 = "test_line1"
    typ1 = {"c_nf_per_km": c1, "r_ohm_per_km": r1, "x_ohm_per_km": x1, "max_i_ka": i1}
    pp.create_std_type(net, data=typ1, name=name1, element="line")
    
    r2 = 0.02
    x2 = 0.04
    c2 = 20
    i2 = 0.4
    name2 = "test_line2"
    typ2 = {"c_nf_per_km": c2, "r_ohm_per_km": r2, "x_ohm_per_km": x2, "max_i_ka": i2}
    pp.create_std_type(net, data=typ2, name=name2, element="line")

    b1 = pp.create_bus(net, vn_kv=0.4)
    b2 = pp.create_bus(net, vn_kv=0.4)
    lid = pp.create_line(net, b1, b2, 1., std_type=name1)
    assert net.line.r_ohm_per_km.at[lid] == r1
    assert net.line.x_ohm_per_km.at[lid] == x1
    assert net.line.c_nf_per_km.at[lid] == c1
    assert net.line.max_i_ka.at[lid] == i1
    assert net.line.std_type.at[lid] == name1
    
    pp.change_std_type(net, lid, name2)
    
    assert net.line.r_ohm_per_km.at[lid] == r2
    assert net.line.x_ohm_per_km.at[lid] == x2
    assert net.line.c_nf_per_km.at[lid] == c2
    assert net.line.max_i_ka.at[lid] == i2
    assert net.line.std_type.at[lid] == name2
Пример #6
0
def test_0gen_2ext_grid_decoupled():
    net = create_test_network2()
    net.gen = net.gen.drop(0)
    net.shunt.q_mvar *= -1
    pp.create_ext_grid(net, 1)
    net.ext_grid.in_service.at[1] = False
    pp.create_ext_grid(net, 3)
    net.ext_grid.in_service.at[2] = False
    auxbus = pp.create_bus(net, name="bus1", vn_kv=10.)
    net.trafo.shift_degree = 150
    pp.create_std_type(net, {"type": "cs", "r_ohm_per_km": 0.876,  "q_mm2": 35.0,
                             "endtmp_deg": 160.0, "c_nf_per_km": 260.0,
                             "max_i_ka": 0.123, "x_ohm_per_km": 0.1159876},
                       name="NAYSEY 3x35rm/16 6/10kV", element="line")
    pp.create_line(net, 0, auxbus, 1, name="line_to_decoupled_grid",
                   std_type="NAYSEY 3x35rm/16 6/10kV")  # NAYSEY 3x35rm/16 6/10kV
    pp.create_ext_grid(net, auxbus)
    pp.create_switch(net, auxbus, 2, et="l", closed=0, type="LS")
    pp.runpp(net, init='dc', calculate_voltage_angles=True)

    assert np.allclose(net.res_bus.p_mw.values*1e3, [-133.158732, 30.000000,
                                                     0.000000, 100.000000, 0.000000])
    assert np.allclose(net.res_bus.q_mvar.values*1e3, [39.5843982697, 2.000000,
                                                       -28.5636406913, 0.000000, 0.000000])
    assert np.allclose(net.res_bus.va_degree.values, [0.000000, -155.752225311,
                                                      -153.669395244,
                                                      -0.0225931152895, 0.0])
    assert np.allclose(net.res_bus.vm_pu.values,  [1.000000, 0.930961,
                                                   0.975764, 0.998865, 1.0])

    assert np.allclose(net.res_ext_grid.p_mw.values*1e3, [133.158732, 0.000000, 0.000000,
                                                          -0.000000])
    assert np.allclose(net.res_ext_grid.q_mvar*1e3, [-39.5843982697, 0.000000, 0.000000,
                                                     -0.000000])
Пример #7
0
def test_parameter_from_std_type_line():
    net = pp.create_empty_network()
    r1 = 0.01
    x1 = 0.02
    c1 = 40
    i1 = 0.2
    name1 = "test_line1"
    typ1 = {
        "c_nf_per_km": c1,
        "r_ohm_per_km": r1,
        "x_ohm_per_km": x1,
        "max_i_ka": i1
    }
    pp.create_std_type(net, data=typ1, name=name1, element="line")

    r2 = 0.02
    x2 = 0.04
    c2 = 20
    i2 = 0.4
    endtemp2 = 40

    endtemp_fill = 20

    name2 = "test_line2"
    typ2 = {
        "c_nf_per_km": c2,
        "r_ohm_per_km": r2,
        "x_ohm_per_km": x2,
        "max_i_ka": i2,
        "endtemp_degree": endtemp2
    }
    pp.create_std_type(net, data=typ2, name=name2, element="line")

    b1 = pp.create_bus(net, vn_kv=0.4)
    b2 = pp.create_bus(net, vn_kv=0.4)
    lid1 = pp.create_line(net, b1, b2, 1., std_type=name1)
    lid2 = pp.create_line(net, b1, b2, 1., std_type=name2)
    lid3 = pp.create_line_from_parameters(net,
                                          b1,
                                          b2,
                                          1.,
                                          r_ohm_per_km=0.03,
                                          x_ohm_per_km=0.04,
                                          c_nf_per_km=20,
                                          max_i_ka=0.3)

    pp.parameter_from_std_type(net, "endtemp_degree", fill=endtemp_fill)
    assert net.line.endtemp_degree.at[
        lid1] == endtemp_fill  #type1 one has not specified an endtemp
    assert net.line.endtemp_degree.at[
        lid2] == endtemp2  #type2 has specified endtemp
    assert net.line.endtemp_degree.at[
        lid3] == endtemp_fill  #line3 has no standard type

    net.line.endtemp_degree.at[lid3] = 10
    pp.parameter_from_std_type(net, "endtemp_degree", fill=endtemp_fill)
    assert net.line.endtemp_degree.at[
        lid3] == 10  #check that existing values arent overwritten
def grid():
    net = pp.create_empty_network()  
    file = 'Sitel_Invade_MV_Topology.xlsx' 
    xl = pd.ExcelFile(Path(str(os.getcwd()) + '/'+ file))  
    MVNetwork = xl.parse('Linies') 
    x_ohm_per_km = MVNetwork['Reactancia_ohm_km'][0]
    c_uf_per_km = MVNetwork['Capacitat_uF_km'][0]
    r_ohm_per_km = MVNetwork['Resistencia_ohm_km'][0]

#IMPORTANT: no change in the capacitance units has been made. In pandapower documentation it is 
#a the magnitude around 240, what we already have. if multiplied by 1000 to change it from micro 
#to nano farads, overload is of 300%. Make sure with Estabanell they are giving us micro. Meanwhile,
#it is left as the value of micro as it is the most similar of a reasonable magnitude
    
    line_data = {"c_nf_per_km": c_uf_per_km , "r_ohm_per_km": r_ohm_per_km, "x_ohm_per_km": x_ohm_per_km, "max_i_ka":0.415}
    pp.create_std_type(net, line_data, "line_ESTABANELL", element='line')

    MVNetworkbusses = xl.parse('Busses')
    for i in MVNetworkbusses['name']:
        pp.create_bus(net, vn_kv=20.5,name=i, max_vm_pu=1.1, min_vm_pu=0.9)

    MVNetworkbussesTrafos = xl.parse('Trafos')
    for i in range(len(MVNetworkbussesTrafos['name'])):
        pp.create_bus(net, vn_kv= MVNetworkbussesTrafos['vn_lv_kv'][i], name=MVNetworkbussesTrafos['name'][i], max_vm_pu=1.1, min_vm_pu=0.9)

    ## per aconseguir els Id's tant dels empalmaments com els nusos a la banda LV dels trafos:
    l=MVNetworkbusses['Id Bus']                 #dataframe
    r=l.append(MVNetworkbussesTrafos['Id Bus']) #r still a DataFrame
    r=r.values.tolist()                         #r list
    net.bus.insert(5, 'Id Bus', r)  
    net.bus = net.bus.set_index("Id Bus", drop = False)


    pp.create_transformer_from_parameters(net, hv_bus=202, lv_bus=75, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.23, vk_percent=4., vkr_percent=0.04, pfe_kw=0.75, i0_percent=1.8, shift_degree=150, in_service=True, parallel=1, name='E.T. NODE 1', tap_side='hv', tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=False, df=1, index=75)    
    pp.create_transformer_from_parameters(net, hv_bus=202, lv_bus=76, sn_mva=0.63, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4.09, vkr_percent=0.0409, pfe_kw=0.548, i0_percent=0.9, shift_degree=150, in_service=True, parallel=1, name='E.T. NODE 2', tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True, df=1, index=76)
    pp.create_transformer_from_parameters(net, hv_bus=204, lv_bus=22, sn_mva=1, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=6., vkr_percent=0.08, pfe_kw=1.4, i0_percent=1.3, shift_degree=150, in_service=True, parallel=1, name='E.T.CUARTEL', tap_side='hv', tap_pos=0,tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True,df=1, index=22)
    pp.create_transformer_from_parameters(net, hv_bus=209, lv_bus=26, sn_mva=0.63, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.053, pfe_kw=1.03, i0_percent=1.6, shift_degree=150, in_service=True, parallel=1, name='E.T.PEDRALS',  tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True,df=1, index=26) 
    pp.create_transformer_from_parameters(net, hv_bus=213, lv_bus=30, sn_mva=0.8, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=6., vkr_percent=0.06, pfe_kw=1.4, i0_percent=1.3, shift_degree=150, in_service=True, parallel=1, name='E.T. LA MUTUA',tap_side='hv', tap_pos=0,tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True, df=1,index=30)
    pp.create_transformer_from_parameters(net, hv_bus=219, lv_bus=34, sn_mva=0.63, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4.28, vkr_percent=0.0428, pfe_kw=1.3, i0_percent=1.05, shift_degree=150, in_service=True, parallel=1, name='E.T. LA LLEÓ', tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True,df=1, index=34)
    pp.create_transformer_from_parameters(net, hv_bus=220, lv_bus=64, sn_mva=0.63, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.04, pfe_kw=1.3, i0_percent=1.6, shift_degree=150, in_service=True, parallel=1, name='E.T. PRADES 1',tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True,df=1, index=64)
    pp.create_transformer_from_parameters(net, hv_bus=228, lv_bus=42, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4.05, vkr_percent=0.054, pfe_kw=0.768, i0_percent=1.72, shift_degree=150, in_service=True, parallel=1, name='E.T. ECUADOR', tap_side='hv', tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True,df=1, index=42)
    pp.create_transformer_from_parameters(net, hv_bus=230, lv_bus=46, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=5., vkr_percent=0.066, pfe_kw=1.193, i0_percent=0.45, shift_degree=150, in_service=True, parallel=1, name='E.T. URUGUAI', tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True, df=1, index=46)
    pp.create_transformer_from_parameters(net, hv_bus=232, lv_bus=50, sn_mva=0.63, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.053, pfe_kw=1.3, i0_percent=1.6, shift_degree=150, in_service=True, parallel=1, name='E.T. LA TORRETA', tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2,tap_step_percent=2.5,tap_step_degree=0,tap_phase_shifter=True,df=1, index=50)
    pp.create_transformer_from_parameters(net, hv_bus=234, lv_bus=54, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.04, pfe_kw=0.93, i0_percent=1.8, shift_degree=150, in_service=True, parallel=1,name='E.T. COSTA BRAVA 1', tap_side='hv',tap_pos=0, tap_neutral=0, tap_min=-2,tap_max=2,tap_step_percent=2.5,tap_step_degree=0,tap_phase_shifter=True, df=1, index=54)
    pp.create_transformer_from_parameters(net, hv_bus=236, lv_bus=58, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.23, vk_percent=4., vkr_percent=0.04, pfe_kw=0.93, i0_percent=1.8, shift_degree=150,in_service=True,parallel=1,name='E.T. NOVA VERDAGUER 1',tap_side='hv',tap_pos=0, tap_neutral=0,tap_min=-2,tap_max=2,tap_step_percent=2.5,tap_step_degree=0,tap_phase_shifter=True, df=1, index=58)
    pp.create_transformer_from_parameters(net, hv_bus=236, lv_bus=66, sn_mva=0.4, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.04, pfe_kw=0.75, i0_percent=1.8, shift_degree=150, in_service=True, parallel=1,name='E.T. NOVA VERDAGUER 2',tap_side='hv',tap_pos=0, tap_neutral=0,tap_min=-2,tap_max=2,tap_step_percent=2.5,tap_step_degree=0,tap_phase_shifter=True, df=1,index=66)
    pp.create_transformer_from_parameters(net, hv_bus=238, lv_bus=61, sn_mva=0.25, vn_hv_kv=20.5, vn_lv_kv=0.4, vk_percent=4., vkr_percent=0.04, pfe_kw=0.65, i0_percent=2, shift_degree=150, in_service=True, parallel=1, name='E.T. GRANADA', tap_side='hv', tap_pos=0, tap_neutral=0, tap_min=-2, tap_max=2, tap_step_percent=2.5, tap_step_degree=0, tap_phase_shifter=True, df=1, index=61)

    for i in range(len(MVNetwork['Id TedisNet'])): 
        pp.create_line(net, from_bus=MVNetworkbusses['Id Bus'][i], to_bus=MVNetworkbusses['Id Bus'][i+1], length_km=MVNetwork['Length_km'][i], std_type="line_ESTABANELL", name=MVNetwork['origen'][i])
    net.line.insert(14, 'Id linia', MVNetwork['Id TedisNet'])

    #the slack bus will act as an external grid
    pp.create_ext_grid(net, bus=201, vm_pu=1.0, va_degree=0.0, in_service=True, name="Grid Connection")

    return(net)
Пример #9
0
def test_create_line_conductance():
    net = pp.create_empty_network()
    pp.create_bus(net, 20)
    pp.create_bus(net, 20)
    pp.create_std_type(net, {'c_nf_per_km': 210, 'max_i_ka': 0.142, 'q_mm2': 50,
                             'r_ohm_per_km': 0.642, 'type': 'cs', 'x_ohm_per_km': 0.083,
                             "g_us_per_km": 1}, "test_conductance")

    l = pp.create_line(net, 0, 1, 1., "test_conductance")
    assert net.line.g_us_per_km.at[l] == 1
Пример #10
0
def test_tap_phase_shifter_default():
    expected_default = False
    net = pp.create_empty_network()
    pp.create_bus(net, 110)
    pp.create_bus(net, 20)
    data = pp.load_std_type(net, "25 MVA 110/20 kV", "trafo")
    if "tap_phase_shifter" in data:
        del data["tap_phase_shifter"]
    pp.create_std_type(net, data, "without_tap_shifter_info", "trafo")
    pp.create_transformer_from_parameters(net, 0, 1, 25e3, 110, 20, 0.4, 12, 20, 0.07)
    pp.create_transformer(net, 0, 1, "without_tap_shifter_info")
    assert (net.trafo.tap_phase_shifter == expected_default).all()
Пример #11
0
def add_tech_types(net, tech):
    """ Add std_type to an existing net
    """
    for i, t in tech.iterrows():
        # i is ID of tech, t is tech data
        data = dict(c_nf_per_km=t.C,
                    r_ohm_per_km=t.R,
                    x_ohm_per_km=t.X,
                    max_i_ka=t.Imax / 1000,
                    q_mm=t.Section,
                    type='oh' if t.Type == 'Overhead' else 'cs')
        pp.create_std_type(net, name=i, data=data, element='line')
Пример #12
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
Пример #13
0
def test_create_std_types_from_net_line():
    net1 = pp.create_empty_network()
    net2 = pp.create_empty_network()

    c = 40
    r = 0.01
    x = 0.02
    i = 0.2

    typdata = {"c_nf_per_km": c, "r_ohm_per_km": r, "x_ohm_per_km": x, "max_i_ka": i,
               "additional": 8}
    pp.create_std_type(net1, typdata, "test_copy")
    pp.copy_std_types(net2, net1, element="line")       
    assert pp.std_type_exists(net2, "test_copy")
Пример #14
0
def test_init_slack_with_multiple_transformers(angles=True):
    np.random.seed(123)
    net = pp.create_empty_network()
    pp.create_bus(net, 220, index=0)
    pp.create_bus(net, 110, index=1)
    pp.create_bus(net, 110, index=2)
    pp.create_bus(net, 110, index=3)
    pp.create_bus(net, 10, index=4)
    pp.create_bus(net, 10, index=5)
    pp.create_bus(net, 10, index=6)
    pp.create_bus(net, 10, index=7, in_service=False)
    pp.create_std_type(net, {"sn_mva": 63, "vn_hv_kv": 110, "vn_lv_kv": 10, "vk_percent": 10.04,
            "vkr_percent": 0.31, "pfe_kw": 31.51, "i0_percent": 0.078, "shift_degree": 150,
            "tap_side": "hv", "tap_neutral": 0, "tap_min": -9, "tap_max": 9, "tap_step_degree": 0,
            "tap_step_percent": 1.5, "tap_phase_shifter": False},
            "63 MVA 110/10 kV v1.4.3 and older", element="trafo")
            
    pp.create_transformer(net, 3, 7, std_type="63 MVA 110/10 kV v1.4.3 and older", in_service=False)
    pp.create_transformer(net, 3, 4, std_type="63 MVA 110/10 kV v1.4.3 and older")
    pp.create_transformer(net, 0, 1, std_type="100 MVA 220/110 kV")
    pp.create_line(net, 1, 2, 2.0, std_type="N2XS(FL)2Y 1x120 RM/35 64/110 kV")
    pp.create_line(net, 1, 3, 2.0, std_type="N2XS(FL)2Y 1x120 RM/35 64/110 kV")
    pp.create_line(net, 4, 5, 2.0, std_type="NA2XS2Y 1x95 RM/25 12/20 kV")
    pp.create_line(net, 5, 6, 2.0, std_type="NA2XS2Y 1x95 RM/25 12/20 kV")
    pp.create_load(net, 2, p_mw=5, q_mvar=3.3)
    pp.create_load(net, 5, p_mw=0.9, q_mvar=0.5)
    pp.create_load(net, bus=6, p_mw=0.7, q_mvar=0.3)
    pp.create_ext_grid(net, bus=0, vm_pu=1.04, va_degree=10., name="Slack 220 kV")
    pp.runpp(net, calculate_voltage_angles=angles)
    for bus, row in net.res_bus[net.bus.in_service == True].iterrows():
        pp.create_measurement(net, "v", "bus", row.vm_pu * r(0.01), 0.01, bus)
        if row.p_mw != 0.:
            continue
        pp.create_measurement(net, "p", "bus", -row.p_mw * r(), max(0.001, abs(0.03 * row.p_mw)),
                              bus)
        pp.create_measurement(net, "q", "bus", -row.q_mvar * r(), max(.0001, abs(0.03 * row.q_mvar)),
                              bus)
    pp.create_measurement(net, "p", "line", net.res_line.p_from_mw[0], .01, side=1, element=0)
    pp.create_measurement(net, "q", "line", net.res_line.q_from_mvar[0], 0.01, side=1, element=0)
    pp.create_measurement(net, "p", "line", net.res_line.p_from_mw[2], .01, side=4, element=2)
    pp.create_measurement(net, "q", "line", net.res_line.q_from_mvar[2], .01, side=4, element=2)
    pp.create_measurement(net, "p", "line", net.res_line.p_from_mw[3], .01, side=5, element=3)
    pp.create_measurement(net, "q", "line", net.res_line.q_from_mvar[3], 0.01, side=5, element=3)
    success = estimate(net, init='slack', calculate_voltage_angles=angles, tolerance=1e-9)

    # pretty high error for vm_pu (half percent!)
    assert success
    assert (np.nanmax(np.abs(net.res_bus.vm_pu.values - net.res_bus_est.vm_pu.values)) < 0.006)
    assert (np.nanmax(np.abs(net.res_bus.va_degree.values- net.res_bus_est.va_degree.values)) < 0.006)
def convert_to_3ph(net):
  ### update external grid
  net.ext_grid["r0x0_max"] = 0.1
  net.ext_grid["x0x_max"] = 1.0
  net.ext_grid["s_sc_max_mva"] = 10000
  net.ext_grid["s_sc_min_mva"] = 8000
  net.ext_grid["rx_min"] = 0.1
  net.ext_grid["rx_max"] = 0.1
  
  ### update transformer
  net.trafo = net.trafo.head(0)
  pp.create_std_type(net, {"sn_mva": 0.3, "vn_hv_kv": 20, "vn_lv_kv": 0.4, "vk_percent": 6,
              "vkr_percent": 0.78125, "pfe_kw": 2.7, "i0_percent": 0.16875,
              "shift_degree": 0, "vector_group": "YNyn",
              "tap_side": "hv", "tap_neutral": 0, "tap_min": -2, "tap_max": 2,
              "tap_step_degree": 0, "tap_step_percent": 2.5, "tap_phase_shifter": False,
              "vk0_percent": 6, "vkr0_percent": 0.78125, "mag0_percent": 100,
              "mag0_rx": 0., "si0_hv_partial": 0.9,}, 
              "YNyn", "trafo")
  
  pp.create_transformer(net, 0, 1, std_type="YNyn", parallel=1,tap_pos=0,
                          index=pp.get_free_id(net.trafo))
  net.trafo.reset_index()
  
  ### add zero sequence for lines
  net.line["r0_ohm_per_km"] = 0.0848
  net.line["x0_ohm_per_km"] = 0.4649556
  net.line["c0_nf_per_km"] = 230.6
  
  ### convert loads to asymmertric loads
  for i in net.load.index:
    row = net.load.loc[i]
    phases = [0,0,0]
    p = i % 3
    phases[p] = 1
    pp.create_asymmetric_load(net, row['bus'], 
               p_a_mw=row['p_mw']*phases[0], q_a_mvar=row['q_mvar']*phases[0], 
               p_b_mw=row['p_mw']*phases[1], q_b_mvar=row['q_mvar']*phases[1],
               p_c_mw=row['p_mw']*phases[2], q_c_mvar=row['q_mvar']*phases[2], 
               sn_mva=row['sn_mva'])
    
  net.load['p_mw'] = 0
  net.load['q_mvar'] = 0
  pp.add_zero_impedance_parameters(net)
  return net
Пример #16
0
    def update_pandapower(self, net: pandapowerNet, name: str):
        """Update a pandapower model by adding this transformer type.

        Args:
            net: a pandapower network model.
            name: name of this transformer type.
        """
        data = {
            "sn_mva": self.s_mva,
            "vn_hv_kv": self.v_high_kv,
            "vn_lv_kv": self.v_low_kv,
            "vk_percent": self.vk_percent,
            "vkr_percent": self.vkr_percent,
            "pfe_kw": self.pfe_kw,
            "i0_percent": self.i0_percent,
            "shift_degree": 0,
        }
        pp.create_std_type(net, data, name=name, element="trafo")
Пример #17
0
def net():
    v_base = 110              # 110kV Base Voltage
    k_va_base = 100         # 100 MVA
#    I_base = (kVA_base/V_base) * 1e-3           # in kA
    net = pp.create_empty_network(sn_mva=k_va_base)
    pp.create_bus(net, vn_kv=v_base, index=1)
    pp.create_bus(net, vn_kv=v_base, index=5)
    pp.create_ext_grid(net, bus=1, vm_pu=1.0, 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": 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")
    pp.create_line(net, from_bus=1, to_bus=5, length_km=50.0, std_type="example_type")

    pp.create_asymmetric_load(net, 5, p_a_mw=50, q_a_mvar=50, p_b_mw=10, q_b_mvar=15,
                              p_c_mw=10, q_c_mvar=5)
    return net
Пример #18
0
def add_network(net, vector_group):
    b1 = pp.create_bus(net, 110, zone=vector_group, index=pp.get_free_id(net.bus))
    b2 = pp.create_bus(net, 20, zone=vector_group)
    pp.create_bus(net, 20, in_service=False)
    b3 = pp.create_bus(net, 20, zone=vector_group)
    b4 = pp.create_bus(net, 20, zone=vector_group)
    pp.create_bus(net, 20)

    pp.create_ext_grid(net, b1, s_sc_max_mva=100, s_sc_min_mva=100, rx_min=0.35, rx_max=0.35)
    net.ext_grid["r0x0_max"] = 0.4
    net.ext_grid["x0x_max"] = 1.0
    
    net.ext_grid["r0x0_min"] = 0.4
    net.ext_grid["x0x_min"] = 1.0
    
    pp.create_std_type(net, {"r_ohm_per_km": 0.122, "x_ohm_per_km": 0.112, "c_nf_per_km": 304,
                         "max_i_ka": 0.421, "endtemp_degree": 70.0, "r0_ohm_per_km": 0.244,
                         "x0_ohm_per_km": 0.336, "c0_nf_per_km": 2000}, "unsymmetric_line_type")
    l1 = pp.create_line(net, b2, b3, length_km=10, std_type="unsymmetric_line_type",
                   index=pp.get_free_id(net.line)+1)
    l2 = pp.create_line(net, b3, b4, length_km=15, std_type="unsymmetric_line_type")
    pp.create_line(net, b3, b4, length_km=15, std_type="unsymmetric_line_type", in_service=False)

    transformer_type = {"i0_percent": 0.071, "pfe_kw": 29, "vkr_percent": 0.282,
            "sn_mva": 25, "vn_lv_kv": 20.0, "vn_hv_kv": 110.0, "vk_percent": 11.2,
            "shift_degree": 150, "vector_group": vector_group, "tap_side": "hv",
            "tap_neutral": 0, "tap_min": -9, "tap_max": 9, "tap_step_degree": 0,
            "tap_step_percent": 1.5, "tap_phase_shifter": False, "vk0_percent": 5,
            "vkr0_percent": 0.4, "mag0_percent": 10, "mag0_rx": 0.4,
            "si0_hv_partial": 0.9}
    pp.create_std_type(net, transformer_type, vector_group, "trafo")
    t1 = pp.create_transformer(net, b1, b2, std_type=vector_group, parallel=2,
                          index=pp.get_free_id(net.trafo)+1)
    pp.create_transformer(net, b1, b2, std_type=vector_group, in_service=False)
    pp.add_zero_impedance_parameters(net)
    return l1, l2, t1
Пример #19
0
def _pp_types_to_csv1(net, export_pp_std_types):
    """ Ensures that all line, trafo, trafo3w, storage and dcline have a type.
        Provides DataFrames in net for line, trafo and trafo3w elements considering
        export_pp_std_types. """

    # --- add 'std_type' column to net.dcline and net.storage if missing
    for elm in ["dcline"]:
        # 'std_type' will be considered for converter.
        if "std_type" not in net[elm].columns:
            if "type" not in net[elm].columns:
                net[elm]["std_type"] = np.nan
            else:
                # if 'std_type' does not exist but 'type', here 'type' is renamed into 'std_type'
                new_index_dict = {(i): (i if i != "type" else "std_type")
                                  for i in net[elm].columns}
                net[elm].rename(columns=new_index_dict, inplace=True)

    # --- add new std_types to line, trafo, trafo3w, storage and dcline tables if missing
    type_params = {
        "line": [
            "r_ohm_per_km", "x_ohm_per_km", "c_nf_per_km", "g_us_per_km",
            "max_i_ka"
        ],
        "trafo": [
            "sn_mva", "vn_hv_kv", "vn_lv_kv", "vk_percent", "vkr_percent",
            "pfe_kw", "i0_percent", "shift_degree"
        ],
        "trafo3w": [
            "sn_hv_mva", "sn_mv_mva", "sn_lv_mva", "vn_hv_kv", "vn_mv_kv",
            "vn_lv_kv", "vk_hv_percent", "vk_mv_percent", "vk_lv_percent",
            "vkr_hv_percent", "vkr_mv_percent", "vkr_lv_percent", "pfe_kw",
            "i0_percent", "shift_mv_degree", "shift_lv_degree"
        ],
        "dcline":
        ["p_mw", "loss_percent", "loss_mw", "vm_from_pu", "vm_to_pu"]
    }
    for elm in type_params.keys():
        elms_without_type = net[elm][pd.isnull(net[elm].std_type)]
        uni_dupl_dict = get_unique_duplicated_dict(elms_without_type,
                                                   subset=type_params[elm])
        for uni, dupl in uni_dupl_dict.items():
            new_typename = net[elm].name.loc[uni] + '_type'
            net[elm].std_type.loc[[uni] + dupl] = new_typename
            if elm in ["line", "trafo", "trafo3w"]:
                pp.create_std_type(net,
                                   dict(net[elm].loc[uni, type_params[elm]].T),
                                   new_typename,
                                   element=elm,
                                   overwrite=False)

    # --- determine line, trafo and trafo3w typenames to be converted,
    # --- considering export_pp_std_types. changes net.std_types dicts into dataframes
    dummy_net = pp.create_empty_network()
    pp_elms_with_type = ["line", "trafo", "trafo3w"]
    for elm in pp_elms_with_type:
        if export_pp_std_types:
            typenames2convert = set(net.std_types[elm].keys())
        else:
            pp_typenames = set(dummy_net.std_types[elm].keys())
            unused_pp_typenames = pp_typenames - set(
                net[elm].std_type.unique())
            typenames2convert = set(
                net.std_types[elm].keys()) - unused_pp_typenames
        net.std_types[elm] = pd.DataFrame(
            net.std_types[elm]).T.loc[typenames2convert].reset_index()
        net.std_types[elm].rename(columns={"index": "std_type"}, inplace=True)

    convert_line_type_acronym(net)
Пример #20
0
              in_service=True)
pp.create_load(net,
               bus=bus4,
               p_mw=80000,
               q_mvar=49579.54707224818,
               name="Load_4")

#create lines

line_data_12 = {
    "c_nf_per_km": 616.76,
    "r_ohm_per_km": 5.33232,
    "x_ohm_per_km": 26.6616,
    "max_i_ka": 0.415
}
pp.create_std_type(net, line_data_12, "line12", element='line')
pp.create_line(net,
               from_bus=bus1,
               to_bus=bus2,
               length_km=1,
               std_type="line12",
               name="line_12")

line_data_13 = {
    "c_nf_per_km": 466.63,
    "r_ohm_per_km": 3.93576,
    "x_ohm_per_km": 19.6788,
    "max_i_ka": 0.415
}
pp.create_std_type(net, line_data_13, "line13", element='line')
pp.create_line(net,
Пример #21
0
def _create_empty_network_with_transformer(trafotype, V_OS=10., V_US=0.4):
    """
    Creates a Network with transformer and infeeder. The reference bus on the \
    high-voltage side is called "Trafostation_OS". The bus on the low-voltage \
    side is called "main_busbar".
    The voltage levels can be set manually and the transformer parameter can \
    be set with "ti"
    """
    pd_net = pp.create_empty_network()
    NFA2X4x70 = {
        "c_nf_per_km": 0,
        "r_ohm_per_km": 0.443,
        "x_ohm_per_km": 0.069,
        "max_i_ka": 0.270,
        "type": "ol",
        "q_mm2": 70
    }
    NAYY4x50 = {
        "c_nf_per_km": 670,
        "r_ohm_per_km": 0.6417,
        "x_ohm_per_km": 0.084823,
        "max_i_ka": 0.141,
        "type": "cs",
        "q_mm2": 50
    }
    NAYY4x150 = {
        "c_nf_per_km": 830,
        "r_ohm_per_km": 0.2067,
        "x_ohm_per_km": 0.08042478,
        "max_i_ka": 0.275,
        "type": "cs",
        "q_mm2": 150
    }
    NAYY4x185 = {
        "c_nf_per_km": 830,
        "r_ohm_per_km": 0.165,
        "x_ohm_per_km": 0.08042478,
        "max_i_ka": 0.313,
        "type": "cs",
        "q_mm2": 185
    }
    NYY4x35 = {
        "c_nf_per_km": 0,
        "r_ohm_per_km": 0.5240284,
        "x_ohm_per_km": 0.08513716,
        "max_i_ka": 0.156,
        "type": "cs",
        "q_mm2": 35
    }
    pp.create_std_type(net=pd_net,
                       data=NFA2X4x70,
                       name="NFA2X 4x70",
                       element="line")
    pp.create_std_type(net=pd_net,
                       data=NAYY4x50,
                       name="NAYY 4x50",
                       element="line")
    pp.create_std_type(net=pd_net,
                       data=NAYY4x150,
                       name="NAYY 4x150",
                       element="line")
    pp.create_std_type(net=pd_net,
                       data=NAYY4x185,
                       name="NAYY 4x185",
                       element="line")
    pp.create_std_type(net=pd_net,
                       data=NYY4x35,
                       name="NYY 4x35",
                       element="line")
    T100kVA = {
        "sn_kva": 100,
        "vn_hv_kv": 10,
        "vn_lv_kv": 0.4,
        "vsc_percent": 4,
        "vscr_percent": 1.2,
        "pfe_kw": 0.45,
        "i0_percent": 0.25,
        "shift_degree": 150,
        "vector_group": "Dyn5"
    }
    T160kVA = {
        "sn_kva": 160,
        "vn_hv_kv": 10,
        "vn_lv_kv": 0.4,
        "vsc_percent": 4,
        "vscr_percent": 1.2,
        "pfe_kw": 0.38,
        "i0_percent": 0.26,
        "shift_degree": 150,
        "vector_group": "Dyn5"
    }
    pp.create_std_type(net=pd_net,
                       data=T100kVA,
                       name="0.1 MVA 10/0.4 kV",
                       element="trafo")
    pp.create_std_type(net=pd_net,
                       data=T160kVA,
                       name="0.16 MVA 10/0.4 kV",
                       element="trafo")

    busnr1 = pp.create_bus(pd_net, name="Trafostation_OS", vn_kv=V_OS)
    pp.create_ext_grid(pd_net, bus=busnr1)
    main_busbar_nr = pp.create_bus(pd_net,
                                   name="main_busbar",
                                   vn_kv=V_US,
                                   type="b")
    pp.create_transformer(pd_net,
                          hv_bus=busnr1,
                          lv_bus=main_busbar_nr,
                          std_type=trafotype,
                          name="trafo 1")
    return pd_net, main_busbar_nr
Пример #22
0
## Read selected excel file
xl = pd.ExcelFile(Path(str(os.getcwd()) + '/' + file))

##Parse specified sheet(s) into a DataFrame. Equivalent to read_excel
MVNetwork = xl.parse('Linies')
x_ohm_per_km = MVNetwork['Reactancia_ohm_km'][0]
c_uf_per_km = MVNetwork['Capacitat_uF_km'][0]
r_ohm_per_km = MVNetwork['Resistencia_ohm_km'][0]

line_data = {
    "c_nf_per_km": c_uf_per_km * 1000,
    "r_ohm_per_km": r_ohm_per_km,
    "x_ohm_per_km": x_ohm_per_km,
    "max_i_ka": 0.415
}
pp.create_std_type(net, line_data, "line_ESTABANELL", element='line')

##############################################################################
################################ CREATE BUSES ################################
MVNetworkbusses = xl.parse('Busses')
for i in MVNetworkbusses['name']:
    pp.create_bus(net, vn_kv=20.5, name=i, max_vm_pu=1.1, min_vm_pu=0.9)

MVNetworkbussesTrafos = xl.parse('Trafos')
for i in range(len(MVNetworkbussesTrafos['name'])):
    pp.create_bus(net,
                  vn_kv=MVNetworkbussesTrafos['vn_lv_kv'][i],
                  name=MVNetworkbussesTrafos['name'][i],
                  max_vm_pu=1.1,
                  min_vm_pu=0.9)
def create_network():
    network = pp.create_empty_network()

    sn_vn_transformer_data = {
        "sn_mva": 1,
        "vn_hv_kv": 20,
        "vn_lv_kv": 0.4,
        "vk_percent": 5,
        "vkr_percent": 1.1,
        "pfe_kw": 1.95,
        "i0_percent": 0.27,
        "shift_degree": 0
    }
    pp.create_std_type(network,
                       sn_vn_transformer_data,
                       "SN/NN 1MVA",
                       element='trafo')

    slack_bus = pp.create_bus(network, vn_kv=110, name="Slack Bus")

    busNodes = []
    lowVoltageBusNodes = []

    pp.create_ext_grid(network,
                       bus=slack_bus,
                       vm_pu=1.01,
                       name="Grid Connection")
    mediumVoltageBusNode = pp.create_bus(network,
                                         vn_kv=20,
                                         name="MV slack side")
    pp.create_transformer(network,
                          hv_bus=slack_bus,
                          lv_bus=mediumVoltageBusNode,
                          std_type="40 MVA 110/20 kV",
                          name="VN/SN Transformer")

    for i in range(0, 100):
        busNodes.append(
            pp.create_bus(network, vn_kv=20, name="Bus_" + str(i + 1)))
        lowVoltageBusNodes.append(
            pp.create_bus(network,
                          vn_kv=0.4,
                          name="LowVoltageBus_" + str(i + 1)))
        pp.create_load(network,
                       bus=lowVoltageBusNodes[i],
                       p_mw=0.14,
                       q_mvar=0.05,
                       name="Load_" + str(i + 1))
        pp.create_transformer(network,
                              hv_bus=busNodes[i],
                              lv_bus=lowVoltageBusNodes[i],
                              std_type="SN/NN 1MVA",
                              name="Transformer_" + str(i + 1))

    pp.create_line(network,
                   from_bus=mediumVoltageBusNode,
                   to_bus=busNodes[0],
                   length_km=0.2,
                   name="Line_0",
                   std_type="NA2XS2Y 1x150 RM/25 12/20 kV")

    for i in range(0, 99):
        pp.create_line(network,
                       from_bus=busNodes[i],
                       to_bus=busNodes[i + 1],
                       length_km=0.6,
                       name="Line_" + str(i + 1),
                       std_type="NA2XS2Y 1x150 RM/25 12/20 kV")

    # Add capacitors with regulating switches
    pp.create_bus(network, vn_kv=20, name="Bus_Cap1")
    pp.create_switch(network,
                     pp.get_element_index(network, "bus", 'Bus_13'),
                     pp.get_element_index(network, "bus", 'Bus_Cap1'),
                     et="b",
                     closed=False,
                     type="LBS",
                     name="CapSwitch1")
    pp.create_shunt_as_capacitor(network,
                                 pp.get_element_index(network, "bus",
                                                      'Bus_Cap1'),
                                 0.125,
                                 0,
                                 name="Cap1")

    pp.create_bus(network, vn_kv=20, name="Bus_Cap2")
    pp.create_switch(network,
                     pp.get_element_index(network, "bus", 'Bus_39'),
                     pp.get_element_index(network, "bus", 'Bus_Cap2'),
                     et="b",
                     closed=False,
                     type="LBS",
                     name="CapSwitch2")
    pp.create_shunt_as_capacitor(network,
                                 pp.get_element_index(network, "bus",
                                                      'Bus_Cap2'),
                                 0.8,
                                 0,
                                 name="Cap2")

    pp.create_bus(network, vn_kv=20, name="Bus_Cap3")
    pp.create_switch(network,
                     pp.get_element_index(network, "bus", 'Bus_85'),
                     pp.get_element_index(network, "bus", 'Bus_Cap3'),
                     et="b",
                     closed=False,
                     type="LBS",
                     name="CapSwitch3")
    pp.create_shunt_as_capacitor(network,
                                 pp.get_element_index(network, "bus",
                                                      'Bus_Cap3'),
                                 0.125,
                                 0,
                                 name="Cap3")

    pp.create_bus(network, vn_kv=20, name="Bus_Cap4")
    pp.create_switch(network,
                     pp.get_element_index(network, "bus", 'Bus_28'),
                     pp.get_element_index(network, "bus", 'Bus_Cap4'),
                     et="b",
                     closed=False,
                     type="LBS",
                     name="CapSwitch4")
    pp.create_shunt_as_capacitor(network,
                                 pp.get_element_index(network, "bus",
                                                      'Bus_Cap4'),
                                 3,
                                 0,
                                 name="Cap4")

    pp.create_bus(network, vn_kv=20, name="Bus_Cap5")
    pp.create_switch(network,
                     pp.get_element_index(network, "bus", 'Bus_59'),
                     pp.get_element_index(network, "bus", 'Bus_Cap5'),
                     et="b",
                     closed=False,
                     type="LBS",
                     name="CapSwitch5")
    pp.create_shunt_as_capacitor(network,
                                 pp.get_element_index(network, "bus",
                                                      'Bus_Cap5'),
                                 0.25,
                                 0,
                                 name="Cap5")

    pp.create_bus(network, vn_kv=20, name="Bus_Cap6")
    pp.create_switch(network,
                     pp.get_element_index(network, "bus", 'Bus_70'),
                     pp.get_element_index(network, "bus", 'Bus_Cap6'),
                     et="b",
                     closed=False,
                     type="LBS",
                     name="CapSwitch6")
    pp.create_shunt_as_capacitor(network,
                                 pp.get_element_index(network, "bus",
                                                      'Bus_Cap6'),
                                 0.8,
                                 0,
                                 name="Cap6")

    pp.create_bus(network, vn_kv=20, name="Bus_Cap7")
    pp.create_switch(network,
                     pp.get_element_index(network, "bus", 'Bus_48'),
                     pp.get_element_index(network, "bus", 'Bus_Cap7'),
                     et="b",
                     closed=False,
                     type="LBS",
                     name="CapSwitch7")
    pp.create_shunt_as_capacitor(network,
                                 pp.get_element_index(network, "bus",
                                                      'Bus_Cap7'),
                                 0.25,
                                 0,
                                 name="Cap7")

    pp.create_bus(network, vn_kv=20, name="Bus_Cap8")
    pp.create_switch(network,
                     pp.get_element_index(network, "bus", 'Bus_95'),
                     pp.get_element_index(network, "bus", 'Bus_Cap8'),
                     et="b",
                     closed=False,
                     type="LBS",
                     name="CapSwitch8")
    pp.create_shunt_as_capacitor(network,
                                 pp.get_element_index(network, "bus",
                                                      'Bus_Cap8'),
                                 0.25,
                                 0,
                                 name="Cap8")

    return network
Пример #24
0
def create_synthetic_voltage_control_lv_network(network_class="rural_1"):
    """
    This function creates a LV network from M. Lindner, C. Aigner, R. Witzmann, F. Wirtz, \
    I. Berber, M. Gödde and R. Frings. "Aktuelle Musternetze zur Untersuchung von \
    Spannungsproblemen in der Niederspannung". 14. Symposium Energieinnovation TU Graz. 2014
    which are representative, synthetic grids for voltage control analysis. According to Lindner \
    the household loads are 5.1 kW and the special loads are 7.9 kW. The user is suggested to \
    assume load distribution and load profile generation.

    OPTIONAL:

        **network_class** (str, 'rural_1') - specify which type of network will be created. Must \
            be in ['rural_1', 'rural_2', 'village_1', 'village_2', 'suburb_1'].

    OUTPUT:

        **net** - returns the required synthetic voltage control lv network

    EXAMPLE:

        import pandapower.networks as nw

        net = nw.create_synthetic_voltage_control_lv_network()
    """
    # process network choosing input data
    if network_class not in [
            'rural_1', 'rural_2', 'village_1', 'village_2', 'suburb_1'
    ]:
        raise ValueError(
            "network_class is not in ['rural_1', 'rural_2', 'village_1', 'village_2',"
            " 'suburb_1']")
    n_feeder = {
        'rural_1': [1, 4, 7],
        'rural_2': [1, 3, 3, 1],
        'village_1': [9, 16, 5, 9],
        'village_2': [9, 12, 5, 10],
        'suburb_1': [9, 17, 5, 13, 8, 1, 9, 17, 5, 13, 4]
    }
    l_lines = {
        'rural_1': [0.26, 0.133, 0.068],
        'rural_2': [3e-3, 0.076, 0.076, 0.076],
        'village_1': [0.053, 0.034, 0.08, 0.04],
        'village_2': [0.021, 0.033, 0.023, 0.052],
        'suburb_1': [
            0.041, 0.017, 0.056, 0.018, 0.035, 0.103, 0.046, 0.019, 0.065,
            0.026, 0.031
        ]
    }
    line_types = {
        'rural_1':
        ['NAYY 4x150 SE'] * 2 + [('NAYY 4x150 SE', 'NAYY 4x120 SE')],
        'rural_2': ['NAYY 4x35'] + ['NF 4x70'] * 3,
        'village_1': ['NAYY 4x150 SE'] * 4,
        'village_2': [('NAYY 4x70', 'NF 4x50'), ('NAYY 4x120 SE', 'NF 4x95'),
                      ('NAYY 4x95', 'NF 4x70'), ('NAYY 4x150 SE', 'NF 4x120')],
        'suburb_1': [('NAYY 4x150 SE', 'NAYY 4x120 SE')] * 3 +
        [('NAYY 4x120 SE', 'NAYY 4x95'), 'NAYY 4x150 SE', 'NAYY 4x95'] +
        ['NAYY 4x150 SE'] * 5
    }
    line_type_change_at = {
        'rural_1': [nan] * 2 + [5],
        'rural_2': [nan] * 4,
        'village_1': [nan] * 4,
        'village_2': [8, 3, 4, 5],
        'suburb_1': [5, 10, 3, 6] + [nan] * 7
    }
    trafo_type = {
        'rural_1': '0.16 MVA 20/0.4 kV vc',
        'rural_2': '0.25 MVA 20/0.4 kV vc',
        'village_1': '0.25 MVA 20/0.4 kV vc',
        'village_2': '0.4 MVA 20/0.4 kV vc',
        'suburb_1': '0.4 MVA 20/0.4 kV vc'
    }
    house_connection_length = {
        'rural_1': 29e-3,
        'rural_2': 4e-3,
        'village_1': 21e-3,
        'village_2': 17e-3,
        'suburb_1': 18e-3
    }
    house_connection_type = {
        'rural_1': 'NAYY 4x50 SE',
        'rural_2': 'NAYY 4x35',
        'village_1': 'NAYY 4x50 SE',
        'village_2': 'NAYY 4x35',
        'suburb_1': 'NAYY 4x35'
    }

    # create network
    net = pp.create_empty_network(
        name='synthetic_voltage_control_lv_network: ' + network_class)

    # create std_types
    # cable data (r, x, i_max) from www.faberkabel.de
    if network_class in ["rural_2", "village_2", "suburb_1"]:
        pp.create_std_type(net, {
            "c_nf_per_km": 202,
            "r_ohm_per_km": 0.869,
            "x_ohm_per_km": 0.085,
            "max_i_ka": 0.123,
            "type": "cs",
            "q_mm2": 35
        },
                           name="NAYY 4x35",
                           element="line")
        if network_class != "suburb_1":
            pp.create_std_type(net, {
                "c_nf_per_km": 17.8,
                "r_ohm_per_km": 0.439,
                "x_ohm_per_km": 0.295,
                "max_i_ka": 0.28,
                "type": "ol",
                "q_mm2": 70
            },
                               name="NF 4x70",
                               element="line")
            if network_class == "village_2":
                pp.create_std_type(net, {
                    "c_nf_per_km": 230,
                    "r_ohm_per_km": 0.443,
                    "x_ohm_per_km": 0.0823,
                    "max_i_ka": 0.179,
                    "type": "cs",
                    "q_mm2": 70
                },
                                   name="NAYY 4x70",
                                   element="line")
                data = net.std_types['line']['48-AL1/8-ST1A 0.4']
                data['q_mm2'] = 50
                pp.create_std_type(net, data, name="NF 4x50", element="line")
                data = net.std_types['line']['94-AL1/15-ST1A 0.4']
                data['q_mm2'] = 95
                pp.create_std_type(net, data, name="NF 4x95", element="line")
                pp.create_std_type(net, {
                    "c_nf_per_km": 16.2,
                    "r_ohm_per_km": 0.274,
                    "x_ohm_per_km": 0.31,
                    "max_i_ka": 0.4,
                    "type": "ol",
                    "q_mm2": 120
                },
                                   name="NF 4x120",
                                   element="line")
        if network_class != "rural_2":
            pp.create_std_type(net, {
                "c_nf_per_km": 240,
                "r_ohm_per_km": 0.32,
                "x_ohm_per_km": 0.082,
                "max_i_ka": 0.215,
                "type": "cs",
                "q_mm2": 95
            },
                               name="NAYY 4x95",
                               element="line")
    # trafos
    if network_class == "rural_1":
        data = net.std_types['trafo']['0.25 MVA 20/0.4 kV']
        data['sn_kva'] = 160
        data['pfe_kw'] = 0.62
        data['i0_percent'] = 0.31
        data['vscr_percent'] = data['vscr_percent'] * 4 / data['vsc_percent']
        data['vsc_percent'] = 4
        pp.create_std_type(net,
                           data,
                           name=trafo_type[network_class],
                           element="trafo")
    elif network_class in ["rural_2", "village_1"]:
        data = net.std_types['trafo']['0.25 MVA 20/0.4 kV']
        data['vscr_percent'] = data['vscr_percent'] * 4 / data['vsc_percent']
        data['vsc_percent'] = 4
        pp.create_std_type(net,
                           data,
                           name=trafo_type[network_class],
                           element="trafo")
    elif network_class in ["suburb_1", "village_2"]:
        data = net.std_types['trafo']['0.4 MVA 20/0.4 kV']
        data['vscr_percent'] = data['vscr_percent'] * 4 / data['vsc_percent']
        data['vsc_percent'] = 4
        pp.create_std_type(net,
                           data,
                           name=trafo_type[network_class],
                           element="trafo")

    # create mv connection
    mv_bus = pp.create_bus(net, 20, name='mv bus')
    bb = pp.create_bus(net, 0.4, name='busbar')
    pp.create_ext_grid(net, mv_bus)
    pp.create_transformer(net, mv_bus, bb, std_type=trafo_type[network_class])

    # create lv network
    idx_feeder = range(len(n_feeder[network_class]))
    lv_buses = {}
    house_buses = {}
    for i in idx_feeder:
        # buses
        lv_buses[i] = pp.create_buses(net,
                                      n_feeder[network_class][i],
                                      0.4,
                                      zone='Feeder' + str(i + 1),
                                      type='m')
        house_buses[i] = pp.create_buses(net,
                                         n_feeder[network_class][i],
                                         0.4,
                                         zone='Feeder' + str(i + 1),
                                         type='n')
        # lines
        lines = pd.DataFrame()
        lines['from_bus'] = append(bb, append(lv_buses[i][:-1], lv_buses[i]))
        lines['to_bus'] = append(lv_buses[i], house_buses[i])
        if line_type_change_at[network_class][i] is nan:
            lines['std_type'] = [line_types[network_class][i]]*n_feeder[network_class][i] + \
                 [house_connection_type[network_class]]*n_feeder[network_class][i]
        else:
            lines['std_type'] = \
                 [line_types[network_class][i][0]]*line_type_change_at[network_class][i] + \
                 [line_types[network_class][i][1]]*(n_feeder[network_class][i] -
                                                    line_type_change_at[network_class][i]) + \
                 [house_connection_type[network_class]]*n_feeder[network_class][i]
        lines['length'] = [l_lines[network_class][i]]*n_feeder[network_class][i] + \
             [house_connection_length[network_class]]*n_feeder[network_class][i]

        for _, lines in lines.iterrows():
            pp.create_line(net,
                           lines.from_bus,
                           lines.to_bus,
                           length_km=lines.length,
                           std_type=lines.std_type)
        # load
        for i in house_buses[i]:
            pp.create_load(net, i, p_kw=5.1)

    # direct loads and DEA
    if network_class == "rural_1":
        special_load = [(2, 4), (3, 2)]
        DER = [(2, 1, 6.9), (2, 2, 15.3), (2, 4, 29.6), (3, 4, 15.8),
               (3, 5, 25.3)]
    elif network_class == "rural_2":
        special_load = [(1, 1), (2, 3), (3, 2)]
        DER = [(1, 1, 29.6), (2, 3, 25.4), (3, 2, 25), (3, 3, 10)]
    elif network_class == "village_1":
        special_load = [(2, 9), (2, 12), (2, 14), (2, 16), (3, 5), (4, 3),
                        (4, 6), (4, 8)]
        DER = [(1, 6, 29.8), (1, 8, 22.8), (2, 3, 7.9), (2, 5, 4.2),
               (2, 11, 16.7), (2, 15, 7.3), (3, 1, 31.9), (3, 3, 17.4),
               (3, 5, 15), (4, 1, 8.8), (4, 3, 19.6), (4, 5, 9.3), (4, 6, 13)]
    elif network_class == "village_2":
        special_load = []
        DER = [(1, 6, 29.8), (1, 2, 16), (1, 3, 4.6), (1, 6, 19), (1, 8, 29),
               (2, 1, 16), (2, 2, 5.2), (2, 3, 19), (2, 5, 12), (2, 10, 10),
               (2, 12, 8), (3, 1, 12.63), (3, 2, 30), (4, 3, 10), (4, 4, 33),
               (4, 10, 8)]
    elif network_class == "suburb_1":
        special_load = [(6, 1), (1, 4), (2, 17), (3, 5), (4, 5), (6, 1),
                        (7, 7), (8, 17)]
        DER = [(1, 1, 9.36), (1, 2, 79.12), (7, 7, 30), (8, 7, 18.47),
               (8, 15, 9.54), (10, 10, 14.4)]
    for i in special_load:
        pp.create_load(net, lv_buses[i[0] - 1][i[1] - 1], p_kw=7.9)
    for i in DER:
        pp.create_sgen(net, house_buses[i[0] - 1][i[1] - 1], p_kw=-i[2])

    # set bus geo data
    bus_geo = {
        "rural_1":
        '{"x":{"0":0.0,"1":0.0,"2":-1.6666666667,"3":-1.6666666667,"4":-0.1666666667,"5":-0.6666666667,"6":-1.1666666667,"7":-1.6666666667,"8":0.3333333333,"9":-0.1666666667,"10":-0.6666666667,"11":-1.6666666667,"12":1.8333333333,"13":1.3333333333,"14":0.8333333333,"15":0.3333333333,"16":-0.1666666667,"17":-0.6666666667,"18":-1.1666666667,"19":2.3333333333,"20":1.8333333333,"21":1.3333333333,"22":0.8333333333,"23":0.3333333333,"24":-0.1666666667,"25":-1.1666666667},"y":{"0":0.0,"1":1.0,"2":2.0,"3":3.0,"4":2.0,"5":3.0,"6":4.0,"7":5.0,"8":3.0,"9":4.0,"10":5.0,"11":6.0,"12":2.0,"13":3.0,"14":4.0,"15":5.0,"16":6.0,"17":7.0,"18":8.0,"19":3.0,"20":4.0,"21":5.0,"22":6.0,"23":7.0,"24":8.0,"25":9.0}}',
        "rural_2":
        '{"x":{"0":0.0,"1":0.0,"2":-2.5,"3":-2.5,"4":-1.0,"5":-1.5,"6":-2.0,"7":-0.5,"8":-1.0,"9":-2.0,"10":1.0,"11":0.5,"12":0.0,"13":1.5,"14":1.0,"15":0.0,"16":2.5,"17":2.5},"y":{"0":0.0,"1":1.0,"2":2.0,"3":3.0,"4":2.0,"5":3.0,"6":4.0,"7":3.0,"8":4.0,"9":5.0,"10":2.0,"11":3.0,"12":4.0,"13":3.0,"14":4.0,"15":5.0,"16":2.0,"17":3.0}}',
        "village_1":
        '{"x":{"0":0.0,"1":0.0,"2":-3.0,"3":-3.5,"4":-4.0,"5":-4.5,"6":-5.0,"7":-5.5,"8":-6.0,"9":-6.5,"10":-7.0,"11":-2.5,"12":-3.0,"13":-3.5,"14":-4.0,"15":-4.5,"16":-5.0,"17":-5.5,"18":-6.0,"19":-7.0,"20":-1.0,"21":-1.5,"22":-2.0,"23":-2.5,"24":-3.0,"25":-3.5,"26":-4.0,"27":-4.5,"28":-5.0,"29":-5.5,"30":-6.0,"31":-6.5,"32":-7.0,"33":-7.5,"34":-8.0,"35":-8.5,"36":-0.5,"37":-1.0,"38":-1.5,"39":-2.0,"40":-2.5,"41":-3.0,"42":-3.5,"43":-4.0,"44":-4.5,"45":-5.0,"46":-5.5,"47":-6.0,"48":-6.5,"49":-7.0,"50":-7.5,"51":-8.5,"52":1.0,"53":0.5,"54":0.0,"55":-0.5,"56":-1.0,"57":1.5,"58":1.0,"59":0.5,"60":0.0,"61":-1.0,"62":3.0,"63":2.5,"64":2.0,"65":1.5,"66":1.0,"67":0.5,"68":0.0,"69":-0.5,"70":-1.0,"71":3.5,"72":3.0,"73":2.5,"74":2.0,"75":1.5,"76":1.0,"77":0.5,"78":0.0,"79":-1.0},"y":{"0":0.0,"1":1.0,"2":2.0,"3":3.0,"4":4.0,"5":5.0,"6":6.0,"7":7.0,"8":8.0,"9":9.0,"10":10.0,"11":3.0,"12":4.0,"13":5.0,"14":6.0,"15":7.0,"16":8.0,"17":9.0,"18":10.0,"19":11.0,"20":2.0,"21":3.0,"22":4.0,"23":5.0,"24":6.0,"25":7.0,"26":8.0,"27":9.0,"28":10.0,"29":11.0,"30":12.0,"31":13.0,"32":14.0,"33":15.0,"34":16.0,"35":17.0,"36":3.0,"37":4.0,"38":5.0,"39":6.0,"40":7.0,"41":8.0,"42":9.0,"43":10.0,"44":11.0,"45":12.0,"46":13.0,"47":14.0,"48":15.0,"49":16.0,"50":17.0,"51":18.0,"52":2.0,"53":3.0,"54":4.0,"55":5.0,"56":6.0,"57":3.0,"58":4.0,"59":5.0,"60":6.0,"61":7.0,"62":2.0,"63":3.0,"64":4.0,"65":5.0,"66":6.0,"67":7.0,"68":8.0,"69":9.0,"70":10.0,"71":3.0,"72":4.0,"73":5.0,"74":6.0,"75":7.0,"76":8.0,"77":9.0,"78":10.0,"79":11.0}}',
        "village_2":
        '{"x":{"0":0.0,"1":0.0,"2":-3.0,"3":-3.5,"4":-4.0,"5":-4.5,"6":-5.0,"7":-5.5,"8":-6.0,"9":-6.5,"10":-7.0,"11":-2.5,"12":-3.0,"13":-3.5,"14":-4.0,"15":-4.5,"16":-5.0,"17":-5.5,"18":-6.0,"19":-7.0,"20":-1.0,"21":-1.5,"22":-2.0,"23":-2.5,"24":-3.0,"25":-3.5,"26":-4.0,"27":-4.5,"28":-5.0,"29":-5.5,"30":-6.0,"31":-6.5,"32":-0.5,"33":-1.0,"34":-1.5,"35":-2.0,"36":-2.5,"37":-3.0,"38":-3.5,"39":-4.0,"40":-4.5,"41":-5.0,"42":-5.5,"43":-6.5,"44":1.0,"45":0.5,"46":0.0,"47":-0.5,"48":-1.0,"49":1.5,"50":1.0,"51":0.5,"52":0.0,"53":-1.0,"54":3.0,"55":2.5,"56":2.0,"57":1.5,"58":1.0,"59":0.5,"60":0.0,"61":-0.5,"62":-1.0,"63":-1.5,"64":3.5,"65":3.0,"66":2.5,"67":2.0,"68":1.5,"69":1.0,"70":0.5,"71":0.0,"72":-0.5,"73":-1.5},"y":{"0":0.0,"1":1.0,"2":2.0,"3":3.0,"4":4.0,"5":5.0,"6":6.0,"7":7.0,"8":8.0,"9":9.0,"10":10.0,"11":3.0,"12":4.0,"13":5.0,"14":6.0,"15":7.0,"16":8.0,"17":9.0,"18":10.0,"19":11.0,"20":2.0,"21":3.0,"22":4.0,"23":5.0,"24":6.0,"25":7.0,"26":8.0,"27":9.0,"28":10.0,"29":11.0,"30":12.0,"31":13.0,"32":3.0,"33":4.0,"34":5.0,"35":6.0,"36":7.0,"37":8.0,"38":9.0,"39":10.0,"40":11.0,"41":12.0,"42":13.0,"43":14.0,"44":2.0,"45":3.0,"46":4.0,"47":5.0,"48":6.0,"49":3.0,"50":4.0,"51":5.0,"52":6.0,"53":7.0,"54":2.0,"55":3.0,"56":4.0,"57":5.0,"58":6.0,"59":7.0,"60":8.0,"61":9.0,"62":10.0,"63":11.0,"64":3.0,"65":4.0,"66":5.0,"67":6.0,"68":7.0,"69":8.0,"70":9.0,"71":10.0,"72":11.0,"73":12.0}}',
        "suburb_1":
        '{"x":{"0":0.0,"1":0.0,"2":-9.5,"3":-10.0,"4":-10.5,"5":-11.0,"6":-11.5,"7":-12.0,"8":-12.5,"9":-13.0,"10":-13.5,"11":-9.0,"12":-9.5,"13":-10.0,"14":-10.5,"15":-11.0,"16":-11.5,"17":-12.0,"18":-12.5,"19":-13.5,"20":-7.5,"21":-8.0,"22":-8.5,"23":-9.0,"24":-9.5,"25":-10.0,"26":-10.5,"27":-11.0,"28":-11.5,"29":-12.0,"30":-12.5,"31":-13.0,"32":-13.5,"33":-14.0,"34":-14.5,"35":-15.0,"36":-15.5,"37":-7.0,"38":-7.5,"39":-8.0,"40":-8.5,"41":-9.0,"42":-9.5,"43":-10.0,"44":-10.5,"45":-11.0,"46":-11.5,"47":-12.0,"48":-12.5,"49":-13.0,"50":-13.5,"51":-14.0,"52":-14.5,"53":-15.5,"54":-5.5,"55":-6.0,"56":-6.5,"57":-7.0,"58":-7.5,"59":-5.0,"60":-5.5,"61":-6.0,"62":-6.5,"63":-7.5,"64":-3.5,"65":-4.0,"66":-4.5,"67":-5.0,"68":-5.5,"69":-6.0,"70":-6.5,"71":-7.0,"72":-7.5,"73":-8.0,"74":-8.5,"75":-9.0,"76":-9.5,"77":-3.0,"78":-3.5,"79":-4.0,"80":-4.5,"81":-5.0,"82":-5.5,"83":-6.0,"84":-6.5,"85":-7.0,"86":-7.5,"87":-8.0,"88":-8.5,"89":-9.5,"90":-1.5,"91":-2.0,"92":-2.5,"93":-3.0,"94":-3.5,"95":-4.0,"96":-4.5,"97":-5.0,"98":-1.0,"99":-1.5,"100":-2.0,"101":-2.5,"102":-3.0,"103":-3.5,"104":-4.0,"105":-5.0,"106":0.0,"107":0.0,"108":1.5,"109":1.0,"110":0.5,"111":0.0,"112":-0.5,"113":-1.0,"114":-1.5,"115":-2.0,"116":-2.5,"117":2.0,"118":1.5,"119":1.0,"120":0.5,"121":0.0,"122":-0.5,"123":-1.0,"124":-1.5,"125":-2.5,"126":3.5,"127":3.0,"128":2.5,"129":2.0,"130":1.5,"131":1.0,"132":0.5,"133":0.0,"134":-0.5,"135":-1.0,"136":-1.5,"137":-2.0,"138":-2.5,"139":-3.0,"140":-3.5,"141":-4.0,"142":-4.5,"143":4.0,"144":3.5,"145":3.0,"146":2.5,"147":2.0,"148":1.5,"149":1.0,"150":0.5,"151":0.0,"152":-0.5,"153":-1.0,"154":-1.5,"155":-2.0,"156":-2.5,"157":-3.0,"158":-3.5,"159":-4.5,"160":5.5,"161":5.0,"162":4.5,"163":4.0,"164":3.5,"165":6.0,"166":5.5,"167":5.0,"168":4.5,"169":3.5,"170":7.5,"171":7.0,"172":6.5,"173":6.0,"174":5.5,"175":5.0,"176":4.5,"177":4.0,"178":3.5,"179":3.0,"180":2.5,"181":2.0,"182":1.5,"183":8.0,"184":7.5,"185":7.0,"186":6.5,"187":6.0,"188":5.5,"189":5.0,"190":4.5,"191":4.0,"192":3.5,"193":3.0,"194":2.5,"195":1.5,"196":9.5,"197":9.0,"198":8.5,"199":8.0,"200":10.0,"201":9.5,"202":9.0,"203":8.0},"y":{"0":0.0,"1":1.0,"2":2.0,"3":3.0,"4":4.0,"5":5.0,"6":6.0,"7":7.0,"8":8.0,"9":9.0,"10":10.0,"11":3.0,"12":4.0,"13":5.0,"14":6.0,"15":7.0,"16":8.0,"17":9.0,"18":10.0,"19":11.0,"20":2.0,"21":3.0,"22":4.0,"23":5.0,"24":6.0,"25":7.0,"26":8.0,"27":9.0,"28":10.0,"29":11.0,"30":12.0,"31":13.0,"32":14.0,"33":15.0,"34":16.0,"35":17.0,"36":18.0,"37":3.0,"38":4.0,"39":5.0,"40":6.0,"41":7.0,"42":8.0,"43":9.0,"44":10.0,"45":11.0,"46":12.0,"47":13.0,"48":14.0,"49":15.0,"50":16.0,"51":17.0,"52":18.0,"53":19.0,"54":2.0,"55":3.0,"56":4.0,"57":5.0,"58":6.0,"59":3.0,"60":4.0,"61":5.0,"62":6.0,"63":7.0,"64":2.0,"65":3.0,"66":4.0,"67":5.0,"68":6.0,"69":7.0,"70":8.0,"71":9.0,"72":10.0,"73":11.0,"74":12.0,"75":13.0,"76":14.0,"77":3.0,"78":4.0,"79":5.0,"80":6.0,"81":7.0,"82":8.0,"83":9.0,"84":10.0,"85":11.0,"86":12.0,"87":13.0,"88":14.0,"89":15.0,"90":2.0,"91":3.0,"92":4.0,"93":5.0,"94":6.0,"95":7.0,"96":8.0,"97":9.0,"98":3.0,"99":4.0,"100":5.0,"101":6.0,"102":7.0,"103":8.0,"104":9.0,"105":10.0,"106":2.0,"107":3.0,"108":2.0,"109":3.0,"110":4.0,"111":5.0,"112":6.0,"113":7.0,"114":8.0,"115":9.0,"116":10.0,"117":3.0,"118":4.0,"119":5.0,"120":6.0,"121":7.0,"122":8.0,"123":9.0,"124":10.0,"125":11.0,"126":2.0,"127":3.0,"128":4.0,"129":5.0,"130":6.0,"131":7.0,"132":8.0,"133":9.0,"134":10.0,"135":11.0,"136":12.0,"137":13.0,"138":14.0,"139":15.0,"140":16.0,"141":17.0,"142":18.0,"143":3.0,"144":4.0,"145":5.0,"146":6.0,"147":7.0,"148":8.0,"149":9.0,"150":10.0,"151":11.0,"152":12.0,"153":13.0,"154":14.0,"155":15.0,"156":16.0,"157":17.0,"158":18.0,"159":19.0,"160":2.0,"161":3.0,"162":4.0,"163":5.0,"164":6.0,"165":3.0,"166":4.0,"167":5.0,"168":6.0,"169":7.0,"170":2.0,"171":3.0,"172":4.0,"173":5.0,"174":6.0,"175":7.0,"176":8.0,"177":9.0,"178":10.0,"179":11.0,"180":12.0,"181":13.0,"182":14.0,"183":3.0,"184":4.0,"185":5.0,"186":6.0,"187":7.0,"188":8.0,"189":9.0,"190":10.0,"191":11.0,"192":12.0,"193":13.0,"194":14.0,"195":15.0,"196":2.0,"197":3.0,"198":4.0,"199":5.0,"200":3.0,"201":4.0,"202":5.0,"203":6.0}}'
    }
    net.bus_geodata = pd.read_json(bus_geo[network_class])
    # Match bus.index
    net.bus_geodata = net.bus_geodata.loc[net.bus.index]
    return net
def case34_3ph():
    """
    Create the IEEE 34 bus from IEEE PES Test Feeders:
    "https://site.ieee.org/pes-testfeeders/resources/”.

    OUTPUT:
        **net** - The pandapower format network.
    """
    net = pp.create_empty_network()

    # Linedata
    # CF-300
    line_data = {
        'c_nf_per_km': 3.8250977,
        'r_ohm_per_km': 0.69599766,
        'x_ohm_per_km': 0.5177677,
        'c0_nf_per_km': 1.86976748,
        'r0_ohm_per_km': 1.08727498,
        'x0_ohm_per_km': 1.47374703,
        'max_i_ka': 0.23,
        'type': 'ol'
    }
    pp.create_std_type(net, line_data, name='CF-300', element='line')

    # CF-301
    line_data = {
        'c_nf_per_km': 3.66884364,
        'r_ohm_per_km': 1.05015841,
        'x_ohm_per_km': 0.52265586,
        'c0_nf_per_km': 1.82231544,
        'r0_ohm_per_km': 1.48350255,
        'x0_ohm_per_km': 1.60203942,
        'max_i_ka': 0.18,
        'type': 'ol'
    }
    pp.create_std_type(net, line_data, name='CF-301', element='line')

    # CF-302
    line_data = {
        'c_nf_per_km': 0.8751182,
        'r_ohm_per_km': 0.5798427,
        'x_ohm_per_km': 0.30768221,
        'c0_nf_per_km': 0.8751182,
        'r0_ohm_per_km': 0.5798427,
        'x0_ohm_per_km': 0.30768221,
        'max_i_ka': 0.14,
        'type': 'ol'
    }
    pp.create_std_type(net, line_data, name='CF-302', element='line')

    # CF-303
    line_data = {
        'c_nf_per_km': 0.8751182,
        'r_ohm_per_km': 0.5798427,
        'x_ohm_per_km': 0.30768221,
        'c0_nf_per_km': 0.8751182,
        'r0_ohm_per_km': 0.5798427,
        'x0_ohm_per_km': 0.30768221,
        'max_i_ka': 0.14,
        'type': 'ol'
    }
    pp.create_std_type(net, line_data, name='CF-303', element='line')

    # CF-304
    line_data = {
        'c_nf_per_km': 0.90382554,
        'r_ohm_per_km': 0.39802955,
        'x_ohm_per_km': 0.29436416,
        'c0_nf_per_km': 0.90382554,
        'r0_ohm_per_km': 0.39802955,
        'x0_ohm_per_km': 0.29436416,
        'max_i_ka': 0.18,
        'type': 'ol'
    }
    pp.create_std_type(net, line_data, name='CF-304', element='line')

    # Busses
    bus0 = pp.create_bus(net,
                         name='Bus 0',
                         vn_kv=24.9,
                         type='n',
                         zone='34_BUS')
    bus_800 = pp.create_bus(net,
                            name='Bus 800',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_802 = pp.create_bus(net,
                            name='Bus 802',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_806 = pp.create_bus(net,
                            name='Bus 806',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_808 = pp.create_bus(net,
                            name='Bus 808',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_810 = pp.create_bus(net,
                            name='Bus 810',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_812 = pp.create_bus(net,
                            name='Bus 812',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_814 = pp.create_bus(net,
                            name='Bus 814',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_850 = pp.create_bus(net,
                            name='Bus 850',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_816 = pp.create_bus(net,
                            name='Bus 816',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_818 = pp.create_bus(net,
                            name='Bus 818',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_820 = pp.create_bus(net,
                            name='Bus 820',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_822 = pp.create_bus(net,
                            name='Bus 822',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_824 = pp.create_bus(net,
                            name='Bus 824',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_826 = pp.create_bus(net,
                            name='Bus 826',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_828 = pp.create_bus(net,
                            name='Bus 828',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_830 = pp.create_bus(net,
                            name='Bus 830',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_854 = pp.create_bus(net,
                            name='Bus 854',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_852 = pp.create_bus(net,
                            name='Bus 852',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_832 = pp.create_bus(net,
                            name='Bus 832',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_858 = pp.create_bus(net,
                            name='Bus 858',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_834 = pp.create_bus(net,
                            name='Bus 834',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_842 = pp.create_bus(net,
                            name='Bus 842',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_844 = pp.create_bus(net,
                            name='Bus 844',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_846 = pp.create_bus(net,
                            name='Bus 846',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_848 = pp.create_bus(net,
                            name='Bus 848',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_860 = pp.create_bus(net,
                            name='Bus 860',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_836 = pp.create_bus(net,
                            name='Bus 836',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_840 = pp.create_bus(net,
                            name='Bus 840',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_862 = pp.create_bus(net,
                            name='Bus 862',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_838 = pp.create_bus(net,
                            name='Bus 838',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_864 = pp.create_bus(net,
                            name='Bus 864',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_888 = pp.create_bus(net,
                            name='Bus 888',
                            vn_kv=4.16,
                            type='n',
                            zone='34_BUS')
    bus_890 = pp.create_bus(net,
                            name='Bus 890',
                            vn_kv=4.16,
                            type='n',
                            zone='34_BUS')
    bus_856 = pp.create_bus(net,
                            name='Bus 856',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')

    # Lines
    pp.create_line(net,
                   bus_800,
                   bus_802,
                   length_km=0.786384,
                   std_type='CF-300',
                   name='Line 0')
    pp.create_line(net,
                   bus_802,
                   bus_806,
                   length_km=0.527304,
                   std_type='CF-300',
                   name='Line 1')
    pp.create_line(net,
                   bus_806,
                   bus_808,
                   length_km=9.823704,
                   std_type='CF-300',
                   name='Line 2')
    pp.create_line(net,
                   bus_808,
                   bus_810,
                   length_km=1.769059,
                   std_type='CF-303',
                   name='Line 3')
    pp.create_line(net,
                   bus_808,
                   bus_812,
                   length_km=11.43000,
                   std_type='CF-300',
                   name='Line 4')
    pp.create_line(net,
                   bus_812,
                   bus_814,
                   length_km=9.061704,
                   std_type='CF-300',
                   name='Line 5')
    # pp.create_line(net, bus_814, bus_850, length_km=0.003048, std_type='CF-301',
    #                name='Line 6')
    pp.create_line(net,
                   bus_816,
                   bus_818,
                   length_km=0.521208,
                   std_type='CF-302',
                   name='Line 7')
    pp.create_line(net,
                   bus_816,
                   bus_824,
                   length_km=3.112008,
                   std_type='CF-301',
                   name='Line 8')
    pp.create_line(net,
                   bus_818,
                   bus_820,
                   length_km=14.67612,
                   std_type='CF-302',
                   name='Line 9')
    pp.create_line(net,
                   bus_820,
                   bus_822,
                   length_km=4.187952,
                   std_type='CF-302',
                   name='Line 10')
    pp.create_line(net,
                   bus_824,
                   bus_826,
                   length_km=0.923544,
                   std_type='CF-303',
                   name='Line 11')
    pp.create_line(net,
                   bus_824,
                   bus_828,
                   length_km=0.256032,
                   std_type='CF-301',
                   name='Line 12')
    pp.create_line(net,
                   bus_828,
                   bus_830,
                   length_km=6.230112,
                   std_type='CF-301',
                   name='Line 13')
    pp.create_line(net,
                   bus_830,
                   bus_854,
                   length_km=0.158496,
                   std_type='CF-301',
                   name='Line 14')
    pp.create_line(net,
                   bus_832,
                   bus_858,
                   length_km=1.493520,
                   std_type='CF-301',
                   name='Line 15')
    pp.create_line(net,
                   bus_834,
                   bus_860,
                   length_km=0.615696,
                   std_type='CF-301',
                   name='Line 16')
    pp.create_line(net,
                   bus_834,
                   bus_842,
                   length_km=0.085344,
                   std_type='CF-301',
                   name='Line 17')
    pp.create_line(net,
                   bus_836,
                   bus_840,
                   length_km=0.262128,
                   std_type='CF-301',
                   name='Line 18')
    pp.create_line(net,
                   bus_836,
                   bus_862,
                   length_km=0.085344,
                   std_type='CF-301',
                   name='Line 19')
    pp.create_line(net,
                   bus_842,
                   bus_844,
                   length_km=0.411480,
                   std_type='CF-301',
                   name='Line 20')
    pp.create_line(net,
                   bus_844,
                   bus_846,
                   length_km=1.109472,
                   std_type='CF-301',
                   name='Line 21')
    pp.create_line(net,
                   bus_846,
                   bus_848,
                   length_km=0.161544,
                   std_type='CF-301',
                   name='Line 22')
    pp.create_line(net,
                   bus_850,
                   bus_816,
                   length_km=0.094488,
                   std_type='CF-301',
                   name='Line 23')
    # pp.create_line(net, bus_852, bus_832, length_km=0.003048, std_type='CF-301',
    #                name='Line 24')
    pp.create_line(net,
                   bus_854,
                   bus_856,
                   length_km=7.110984,
                   std_type='CF-303',
                   name='Line 25')
    pp.create_line(net,
                   bus_854,
                   bus_852,
                   length_km=11.22578,
                   std_type='CF-301',
                   name='Line 26')
    pp.create_line(net,
                   bus_858,
                   bus_864,
                   length_km=0.493776,
                   std_type='CF-302',
                   name='Line 27')
    pp.create_line(net,
                   bus_858,
                   bus_834,
                   length_km=1.776984,
                   std_type='CF-301',
                   name='Line 28')
    pp.create_line(net,
                   bus_860,
                   bus_836,
                   length_km=0.816864,
                   std_type='CF-301',
                   name='Line 29')
    pp.create_line(net,
                   bus_860,
                   bus_838,
                   length_km=1.481328,
                   std_type='CF-304',
                   name='Line 30')
    pp.create_line(net,
                   bus_888,
                   bus_890,
                   length_km=3.218688,
                   std_type='CF-300',
                   name='Line 31')

    # Substation
    pp.create_transformer_from_parameters(net,
                                          bus0,
                                          bus_800,
                                          sn_mva=2.5,
                                          vn_hv_kv=24.9,
                                          vn_lv_kv=24.9,
                                          vkr_percent=1.0,
                                          vk_percent=8.062257,
                                          pfe_kw=0.0,
                                          i0_percent=0.0,
                                          shift_degree=0.0,
                                          vkr0_percent=1.0,
                                          vk0_percent=8.062257,
                                          vector_group='YNyn',
                                          mag0_percent=100.0,
                                          mag0_rx=0,
                                          si0_hv_partial=0.9,
                                          tap_side='lv',
                                          tap_neutral=0,
                                          tap_max=2,
                                          tap_min=-2,
                                          tap_step_percent=2.5,
                                          tap_pos=-2,
                                          name='Substation')
    # Regulator 1
    pp.create_transformer_from_parameters(net,
                                          bus_814,
                                          bus_850,
                                          sn_mva=1,
                                          vn_hv_kv=24.9,
                                          vn_lv_kv=24.9,
                                          vkr_percent=0.320088,
                                          vk_percent=0.357539,
                                          pfe_kw=0.0,
                                          i0_percent=0.0,
                                          shift_degree=0.0,
                                          vkr0_percent=0.452171,
                                          vk0_percent=0.665505,
                                          vector_group='YNyn',
                                          mag0_percent=100.0,
                                          mag0_rx=0,
                                          si0_hv_partial=0.9,
                                          tap_side='lv',
                                          tap_neutral=0,
                                          tap_max=16,
                                          tap_min=-16,
                                          tap_step_percent=0.625,
                                          tap_pos=0,
                                          tap_phase_shifter=False,
                                          name='Regulator 1')

    # Regulator 2
    pp.create_transformer_from_parameters(net,
                                          bus_852,
                                          bus_832,
                                          sn_mva=1,
                                          vn_hv_kv=24.9,
                                          vn_lv_kv=24.9,
                                          vkr_percent=0.320088,
                                          vk_percent=0.357539,
                                          pfe_kw=0.0,
                                          i0_percent=0.0,
                                          shift_degree=0.0,
                                          vkr0_percent=0.452171,
                                          vk0_percent=0.665505,
                                          vector_group='YNyn',
                                          mag0_percent=100.0,
                                          mag0_rx=0,
                                          si0_hv_partial=0.9,
                                          tap_side='lv',
                                          tap_neutral=0,
                                          tap_max=16,
                                          tap_min=-16,
                                          tap_step_percent=0.625,
                                          tap_pos=0,
                                          tap_phase_shifter=False,
                                          name='Regulator 2')
    # Traformer
    pp.create_transformer_from_parameters(net,
                                          bus_832,
                                          bus_888,
                                          sn_mva=0.5,
                                          vn_hv_kv=24.9,
                                          vn_lv_kv=4.16,
                                          vkr_percent=1.9,
                                          vk_percent=4.5,
                                          pfe_kw=0.0,
                                          i0_percent=0.0,
                                          shift_degree=0.0,
                                          vkr0_percent=1.9,
                                          vk0_percent=4.5,
                                          vector_group='YNyn',
                                          mag0_percent=100.0,
                                          mag0_rx=0,
                                          si0_hv_partial=0.9,
                                          name='Traformer')

    # Loads
    pp.create_asymmetric_load(net,
                              bus_806,
                              p_a_mw=0,
                              p_b_mw=0.03,
                              p_c_mw=0.025,
                              q_a_mvar=0,
                              q_b_mvar=0.015,
                              q_c_mvar=0.014,
                              name='Load 806',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_810,
                              p_a_mw=0,
                              p_b_mw=0.016,
                              p_c_mw=0,
                              q_a_mvar=0,
                              q_b_mvar=0.008,
                              q_c_mvar=0,
                              name='Load 810',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_820,
                              p_a_mw=0.034,
                              p_b_mw=0,
                              p_c_mw=0,
                              q_a_mvar=0.017,
                              q_b_mvar=0,
                              q_c_mvar=0,
                              name='Load 820',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_822,
                              p_a_mw=0.135,
                              p_b_mw=0,
                              p_c_mw=0,
                              q_a_mvar=0.07,
                              q_b_mvar=0,
                              q_c_mvar=0,
                              name='Load 822',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_824,
                              p_a_mw=0,
                              p_b_mw=0.005,
                              p_c_mw=0,
                              q_a_mvar=0,
                              q_b_mvar=0.002,
                              q_c_mvar=0,
                              name='Load 824',
                              type='delta')
    pp.create_asymmetric_load(net,
                              bus_826,
                              p_a_mw=0,
                              p_b_mw=0.04,
                              p_c_mw=0,
                              q_a_mvar=0,
                              q_b_mvar=0.02,
                              q_c_mvar=0,
                              name='Load 826',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_828,
                              p_a_mw=0,
                              p_b_mw=0,
                              p_c_mw=0.004,
                              q_a_mvar=0,
                              q_b_mvar=0,
                              q_c_mvar=0.002,
                              name='Load 828',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_830,
                              p_a_mw=0.007,
                              p_b_mw=0,
                              p_c_mw=0,
                              q_a_mvar=0.003,
                              q_b_mvar=0,
                              q_c_mvar=0,
                              name='Load 830',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_856,
                              p_a_mw=0,
                              p_b_mw=0.004,
                              p_c_mw=0,
                              q_a_mvar=0,
                              q_b_mvar=0.002,
                              q_c_mvar=0,
                              name='Load 856',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_858,
                              p_a_mw=0.007,
                              p_b_mw=0.002,
                              p_c_mw=0.006,
                              q_a_mvar=0.003,
                              q_b_mvar=0.001,
                              q_c_mvar=0.003,
                              name='Load 858',
                              type='delta')
    pp.create_asymmetric_load(net,
                              bus_864,
                              p_a_mw=0.002,
                              p_b_mw=0,
                              p_c_mw=0,
                              q_a_mvar=0.001,
                              q_b_mvar=0,
                              q_c_mvar=0,
                              name='Load 864',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_834,
                              p_a_mw=0.004,
                              p_b_mw=0.015,
                              p_c_mw=0.013,
                              q_a_mvar=0.002,
                              q_b_mvar=0.008,
                              q_c_mvar=0.007,
                              name='Load 834',
                              type='delta')
    pp.create_asymmetric_load(net,
                              bus_860,
                              p_a_mw=0.016,
                              p_b_mw=0.02,
                              p_c_mw=0.11,
                              q_a_mvar=0.008,
                              q_b_mvar=0.01,
                              q_c_mvar=0.055,
                              name='Load 860',
                              type='delta')
    pp.create_asymmetric_load(net,
                              bus_836,
                              p_a_mw=0.03,
                              p_b_mw=0.01,
                              p_c_mw=0.042,
                              q_a_mvar=0.015,
                              q_b_mvar=0.006,
                              q_c_mvar=0.022,
                              name='Load 836',
                              type='delta')
    pp.create_asymmetric_load(net,
                              bus_840,
                              p_a_mw=0.018,
                              p_b_mw=0.022,
                              p_c_mw=0,
                              q_a_mvar=0.009,
                              q_b_mvar=0.011,
                              q_c_mvar=0,
                              name='Load 840',
                              type='delta')
    pp.create_asymmetric_load(net,
                              bus_838,
                              p_a_mw=0,
                              p_b_mw=0.028,
                              p_c_mw=0,
                              q_a_mvar=0,
                              q_b_mvar=0.014,
                              q_c_mvar=0,
                              name='Load 838',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_844,
                              p_a_mw=0.009,
                              p_b_mw=0,
                              p_c_mw=0,
                              q_a_mvar=0.005,
                              q_b_mvar=0,
                              q_c_mvar=0,
                              name='Load 844',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_846,
                              p_a_mw=0,
                              p_b_mw=0.025,
                              p_c_mw=0.012,
                              q_a_mvar=0,
                              q_b_mvar=0.02,
                              q_c_mvar=0.011,
                              name='Load 846',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_848,
                              p_a_mw=0,
                              p_b_mw=0.023,
                              p_c_mw=0,
                              q_a_mvar=0,
                              q_b_mvar=0.011,
                              q_c_mvar=0,
                              name='Load 848',
                              type='wye')

    pp.create_asymmetric_load(net,
                              bus_860,
                              p_a_mw=0.02,
                              p_b_mw=0.02,
                              p_c_mw=0.02,
                              q_a_mvar=0.016,
                              q_b_mvar=0.016,
                              q_c_mvar=0.016,
                              name='Load 860 spot',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_840,
                              p_a_mw=0.009,
                              p_b_mw=0.009,
                              p_c_mw=0.009,
                              q_a_mvar=0.007,
                              q_b_mvar=0.007,
                              q_c_mvar=0.007,
                              name='Load 840 spot',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_844,
                              p_a_mw=0.135,
                              p_b_mw=0.135,
                              p_c_mw=0.135,
                              q_a_mvar=0.105,
                              q_b_mvar=0.105,
                              q_c_mvar=0.105,
                              name='Load 844 spot',
                              type='wye')
    pp.create_asymmetric_load(net,
                              bus_848,
                              p_a_mw=0.02,
                              p_b_mw=0.02,
                              p_c_mw=0.02,
                              q_a_mvar=0.016,
                              q_b_mvar=0.016,
                              q_c_mvar=0.016,
                              name='Load 848 spot',
                              type='delta')
    pp.create_asymmetric_load(net,
                              bus_890,
                              p_a_mw=0.15,
                              p_b_mw=0.15,
                              p_c_mw=0.15,
                              q_a_mvar=0.075,
                              q_b_mvar=0.075,
                              q_c_mvar=0.075,
                              name='Load 890 spot',
                              type='delta')
    pp.create_asymmetric_load(net,
                              bus_830,
                              p_a_mw=0.01,
                              p_b_mw=0.01,
                              p_c_mw=0.025,
                              q_a_mvar=0.005,
                              q_b_mvar=0.005,
                              q_c_mvar=0.01,
                              name='Load 830 spot',
                              type='delta')

    # External grid
    pp.create_ext_grid(net,
                       bus0,
                       vm_pu=1.0,
                       va_degree=0.0,
                       s_sc_max_mva=10.0,
                       s_sc_min_mva=10.0,
                       rx_max=1,
                       rx_min=1,
                       r0x0_max=1,
                       x0x_max=1)

    # Distributed generators
    pp.create_sgen(net,
                   bus_848,
                   p_mw=0.66,
                   q_mvar=0.500,
                   name='DG 1',
                   max_p_mw=0.66,
                   min_p_mw=0,
                   max_q_mvar=0.5,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_890,
                   p_mw=0.50,
                   q_mvar=0.375,
                   name='DG 2',
                   max_p_mw=0.50,
                   min_p_mw=0,
                   max_q_mvar=0.375,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_822,
                   p_mw=0.2,
                   type='PV',
                   name='PV 1',
                   max_p_mw=0.2,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_856,
                   p_mw=0.2,
                   type='PV',
                   name='PV 2',
                   max_p_mw=0.2,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_838,
                   p_mw=0.2,
                   type='PV',
                   name='PV 3',
                   max_p_mw=0.2,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_822,
                   p_mw=0.3,
                   type='WP',
                   name='WP 1',
                   max_p_mw=0.3,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_826,
                   p_mw=0.3,
                   type='WP',
                   name='WP 2',
                   max_p_mw=0.3,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_838,
                   p_mw=0.3,
                   type='WP',
                   name='WP 3',
                   max_p_mw=0.3,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)

    # Shunt capacity bank
    pp.create_shunt(net,
                    bus_840,
                    q_mvar=-0.12,
                    name='SCB 1',
                    step=4,
                    max_step=4)
    pp.create_shunt(net,
                    bus_864,
                    q_mvar=-0.12,
                    name='SCB 2',
                    step=4,
                    max_step=4)

    # storage
    pp.create_storage(net,
                      bus_810,
                      p_mw=0.2,
                      max_e_mwh=1.0,
                      sn_mva=1.0,
                      soc_percent=50,
                      min_e_mwh=0.2,
                      name='Storage')

    pp.add_zero_impedance_parameters(net)

    return net


# net = case34_3ph()
# pp.pf.runpp_3ph.runpp_3ph(net)
# print(net.res_bus_3ph)
# print(net.sn_mva)
Пример #26
0
    # process network choosing input data
    try:
        case = case if case != "bad" else "worse"
        net_data = parameters[feeders_range][linetype][customer][case]
    except KeyError:
        raise ValueError(
            "This combination of 'feeders_range', 'linetype', 'customer' and 'case' "
            "is no dickert network.")

    # add missing line types
    if 'NFA2X 4x70' not in net.std_types['line'].keys():
        pp.create_std_type(net, {
            "c_nf_per_km": 12.8,
            "r_ohm_per_km": 0.443,
            "x_ohm_per_km": 0.07,
            "max_i_ka": 0.205,
            "type": "ol"
        },
                           name='NFA2X 4x70',
                           element="line")
    # determine low voltage vn_kv
    lv_vn_kv = net.bus.vn_kv.at[busbar_index]

    # feeder without branch line
    _create_feeder(net, net_data, 0, busbar_index, linetype, lv_vn_kv)
    # feeder with one branch line
    if net_data[2]:
        _create_feeder(net, net_data, 1, busbar_index, linetype, lv_vn_kv)
    # feeder with two branch lines
    if net_data[3]:
        _create_feeder(net, net_data, 2, busbar_index, linetype, lv_vn_kv)
Пример #27
0
def test_3bus_with_transformer():
    np.random.seed(12)

    # 1. Create network
    net = pp.create_empty_network()
    pp.create_bus(net, name="bus1", vn_kv=10.)
    pp.create_bus(net, name="bus2", vn_kv=10.)
    pp.create_bus(net, name="bus3", vn_kv=10.)
    pp.create_bus(net, name="bus4", vn_kv=110.)
    pp.create_ext_grid(net, bus=3, vm_pu=1.01)
    pp.create_line_from_parameters(net, 0, 1, 1, r_ohm_per_km=.01, x_ohm_per_km=.03, c_nf_per_km=0.,
                                   max_i_ka=1)
    pp.create_line_from_parameters(net, 0, 2, 1, r_ohm_per_km=.02, x_ohm_per_km=.05, c_nf_per_km=0.,
                                   max_i_ka=1)
    pp.create_line_from_parameters(net, 1, 2, 1, r_ohm_per_km=.03, x_ohm_per_km=.08, c_nf_per_km=0.,
                                   max_i_ka=1)
    
    pp.create_std_type(net, {"sn_mva": 25, "vn_hv_kv": 110, "vn_lv_kv": 10, "vk_percent": 10.04,
            "vkr_percent": 0.276, "pfe_kw": 28.51, "i0_percent": 0.073, "shift_degree": 150,
            "tap_side": "hv", "tap_neutral": 0, "tap_min": -9, "tap_max": 9, "tap_step_degree": 0,
            "tap_step_percent": 1.5, "tap_phase_shifter": False},
            "25 MVA 110/10 kV v1.4.3 and older", element="trafo")
    pp.create_transformer(net, 3, 0, std_type="25 MVA 110/10 kV v1.4.3 and older")

    pp.create_load(net, bus=1, p_mw=0.45, q_mvar=0.3)
    pp.create_load(net, bus=2, p_mw=0.35, q_mvar=0.2)

    pp.runpp(net, calculate_voltage_angles=True)

    pp.create_measurement(net, "v", "bus", r2(net.res_bus.vm_pu.iloc[0], .004), .004, element=0)
    pp.create_measurement(net, "v", "bus", r2(net.res_bus.vm_pu.iloc[1], .004), .004, element=1)
    pp.create_measurement(net, "v", "bus", r2(net.res_bus.vm_pu.iloc[3], .004), .004, element=3)

    pp.create_measurement(net, "p", "bus", -r2(net.res_bus.p_mw.iloc[1], .01), .01, element=1)
    pp.create_measurement(net, "q", "bus", -r2(net.res_bus.q_mvar.iloc[1], .01), .01, element=1)

    pp.create_measurement(net, "p", "bus", -r2(net.res_bus.p_mw.iloc[2], .01), .010, element=2)
    pp.create_measurement(net, "q", "bus", -r2(net.res_bus.q_mvar.iloc[2], .01), .01, element=2)

    pp.create_measurement(net, "p", "bus", 0., 0.001, element=0)
    pp.create_measurement(net, "q", "bus", 0., 0.001, element=0)

    pp.create_measurement(net, "p", "line", r2(net.res_line.p_from_mw.iloc[0], .008), .008, 0, 0)
    pp.create_measurement(net, "p", "line", r2(net.res_line.p_from_mw.iloc[1], .008), .008, 1, 0)

    pp.create_measurement(net, "p", "trafo", r2(net.res_trafo.p_hv_mw.iloc[0], .01), .01,
                          side="hv", element=0)  # transformer meas.
    pp.create_measurement(net, "q", "trafo", r2(net.res_trafo.q_hv_mvar.iloc[0], .01), .01,
                          side=3, element=0)  # at hv side

    # 2. Do state estimation
    success = estimate(net, init='slack', tolerance=1e-6, maximum_iterations=10, calculate_voltage_angles=True)
    v_result = net.res_bus_est.vm_pu.values
    delta_result = net.res_bus_est.va_degree.values

    diff_v = net.res_bus.vm_pu.values - v_result
    diff_delta = net.res_bus.va_degree.values - delta_result

    assert success
    assert (np.nanmax(abs(diff_v)) < 6e-4)
    assert (np.nanmax(abs(diff_delta)) < 8e-4)

    # Backwards check. Use state estimation results for power flow and check for equality
    net.load.drop(net.load.index, inplace=True)
    net.ext_grid.vm_pu = net.res_bus_est.vm_pu.iloc[net.ext_grid.bus.iloc[0]]
    pp.create_load(net, 0, net.res_bus_est.p_mw.iloc[0], net.res_bus_est.q_mvar.iloc[0])
    pp.create_load(net, 1, net.res_bus_est.p_mw.iloc[1], net.res_bus_est.q_mvar.iloc[1])
    pp.create_load(net, 2, net.res_bus_est.p_mw.iloc[2], net.res_bus_est.q_mvar.iloc[2])

    _compare_pf_and_se_results(net)
Пример #28
0
def case34():
    """
    Create the IEEE 34 bus from IEEE PES Test Feeders:
    "https://site.ieee.org/pes-testfeeders/resources/”.

    OUTPUT:
        **net** - The pandapower format network.
    """
    net = pp.create_empty_network()

    # Linedata
    # CF-300
    line_data = {
        'c_nf_per_km': 3.8250977,
        'r_ohm_per_km': 0.69599766,
        'x_ohm_per_km': 0.5177677,
        'c0_nf_per_km': 1.86976748,
        'r0_ohm_per_km': 1.08727498,
        'x0_ohm_per_km': 1.47374703,
        'max_i_ka': 0.23,
        'type': 'ol'
    }
    pp.create_std_type(net, line_data, name='CF-300', element='line')

    # CF-301
    line_data = {
        'c_nf_per_km': 3.66884364,
        'r_ohm_per_km': 1.05015841,
        'x_ohm_per_km': 0.52265586,
        'c0_nf_per_km': 1.82231544,
        'r0_ohm_per_km': 1.48350255,
        'x0_ohm_per_km': 1.60203942,
        'max_i_ka': 0.18,
        'type': 'ol'
    }
    pp.create_std_type(net, line_data, name='CF-301', element='line')

    # CF-302
    line_data = {
        'c_nf_per_km': 0.8751182,
        'r_ohm_per_km': 0.5798427,
        'x_ohm_per_km': 0.30768221,
        'c0_nf_per_km': 0.8751182,
        'r0_ohm_per_km': 0.5798427,
        'x0_ohm_per_km': 0.30768221,
        'max_i_ka': 0.14,
        'type': 'ol'
    }
    pp.create_std_type(net, line_data, name='CF-302', element='line')

    # CF-303
    line_data = {
        'c_nf_per_km': 0.8751182,
        'r_ohm_per_km': 0.5798427,
        'x_ohm_per_km': 0.30768221,
        'c0_nf_per_km': 0.8751182,
        'r0_ohm_per_km': 0.5798427,
        'x0_ohm_per_km': 0.30768221,
        'max_i_ka': 0.14,
        'type': 'ol'
    }
    pp.create_std_type(net, line_data, name='CF-303', element='line')

    # CF-304
    line_data = {
        'c_nf_per_km': 0.90382554,
        'r_ohm_per_km': 0.39802955,
        'x_ohm_per_km': 0.29436416,
        'c0_nf_per_km': 0.90382554,
        'r0_ohm_per_km': 0.39802955,
        'x0_ohm_per_km': 0.29436416,
        'max_i_ka': 0.18,
        'type': 'ol'
    }
    pp.create_std_type(net, line_data, name='CF-304', element='line')

    # Busses
    # bus0 = pp.create_bus(net, name='Bus 0', vn_kv=69.0, type='n', zone='34_BUS')
    bus_800 = pp.create_bus(net,
                            name='Bus 800',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_802 = pp.create_bus(net,
                            name='Bus 802',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_806 = pp.create_bus(net,
                            name='Bus 806',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_808 = pp.create_bus(net,
                            name='Bus 808',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_810 = pp.create_bus(net,
                            name='Bus 810',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_812 = pp.create_bus(net,
                            name='Bus 812',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_814 = pp.create_bus(net,
                            name='Bus 814',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_850 = pp.create_bus(net,
                            name='Bus 850',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_816 = pp.create_bus(net,
                            name='Bus 816',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_818 = pp.create_bus(net,
                            name='Bus 818',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_820 = pp.create_bus(net,
                            name='Bus 820',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_822 = pp.create_bus(net,
                            name='Bus 822',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_824 = pp.create_bus(net,
                            name='Bus 824',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_826 = pp.create_bus(net,
                            name='Bus 826',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_828 = pp.create_bus(net,
                            name='Bus 828',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_830 = pp.create_bus(net,
                            name='Bus 830',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_854 = pp.create_bus(net,
                            name='Bus 854',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_852 = pp.create_bus(net,
                            name='Bus 852',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_832 = pp.create_bus(net,
                            name='Bus 832',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_858 = pp.create_bus(net,
                            name='Bus 858',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_834 = pp.create_bus(net,
                            name='Bus 834',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_842 = pp.create_bus(net,
                            name='Bus 842',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_844 = pp.create_bus(net,
                            name='Bus 844',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_846 = pp.create_bus(net,
                            name='Bus 846',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_848 = pp.create_bus(net,
                            name='Bus 848',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_860 = pp.create_bus(net,
                            name='Bus 860',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_836 = pp.create_bus(net,
                            name='Bus 836',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_840 = pp.create_bus(net,
                            name='Bus 840',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_862 = pp.create_bus(net,
                            name='Bus 862',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_838 = pp.create_bus(net,
                            name='Bus 838',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_864 = pp.create_bus(net,
                            name='Bus 864',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')
    bus_888 = pp.create_bus(net,
                            name='Bus 888',
                            vn_kv=4.16,
                            type='n',
                            zone='34_BUS')
    bus_890 = pp.create_bus(net,
                            name='Bus 890',
                            vn_kv=4.16,
                            type='n',
                            zone='34_BUS')
    bus_856 = pp.create_bus(net,
                            name='Bus 856',
                            vn_kv=24.9,
                            type='n',
                            zone='34_BUS')

    # Lines
    pp.create_line(net,
                   bus_800,
                   bus_802,
                   length_km=0.786384,
                   std_type='CF-300',
                   name='Line 0')
    pp.create_line(net,
                   bus_802,
                   bus_806,
                   length_km=0.527304,
                   std_type='CF-300',
                   name='Line 1')
    pp.create_line(net,
                   bus_806,
                   bus_808,
                   length_km=9.823704,
                   std_type='CF-300',
                   name='Line 2')
    pp.create_line(net,
                   bus_808,
                   bus_810,
                   length_km=1.769059,
                   std_type='CF-303',
                   name='Line 3')
    pp.create_line(net,
                   bus_808,
                   bus_812,
                   length_km=11.43000,
                   std_type='CF-300',
                   name='Line 4')
    pp.create_line(net,
                   bus_812,
                   bus_814,
                   length_km=9.061704,
                   std_type='CF-300',
                   name='Line 5')
    # pp.create_line(net, bus_814, bus_850, length_km=0.003048, std_type='CF-301', name='Line 6')
    pp.create_line(net,
                   bus_816,
                   bus_818,
                   length_km=0.521208,
                   std_type='CF-302',
                   name='Line 7')
    pp.create_line(net,
                   bus_816,
                   bus_824,
                   length_km=3.112008,
                   std_type='CF-301',
                   name='Line 8')
    pp.create_line(net,
                   bus_818,
                   bus_820,
                   length_km=14.67612,
                   std_type='CF-302',
                   name='Line 9')
    pp.create_line(net,
                   bus_820,
                   bus_822,
                   length_km=4.187952,
                   std_type='CF-302',
                   name='Line 10')
    pp.create_line(net,
                   bus_824,
                   bus_826,
                   length_km=0.923544,
                   std_type='CF-303',
                   name='Line 11')
    pp.create_line(net,
                   bus_824,
                   bus_828,
                   length_km=0.256032,
                   std_type='CF-301',
                   name='Line 12')
    pp.create_line(net,
                   bus_828,
                   bus_830,
                   length_km=6.230112,
                   std_type='CF-301',
                   name='Line 13')
    pp.create_line(net,
                   bus_830,
                   bus_854,
                   length_km=0.158496,
                   std_type='CF-301',
                   name='Line 14')
    pp.create_line(net,
                   bus_832,
                   bus_858,
                   length_km=1.493520,
                   std_type='CF-301',
                   name='Line 15')
    pp.create_line(net,
                   bus_834,
                   bus_860,
                   length_km=0.615696,
                   std_type='CF-301',
                   name='Line 16')
    pp.create_line(net,
                   bus_834,
                   bus_842,
                   length_km=0.085344,
                   std_type='CF-301',
                   name='Line 17')
    pp.create_line(net,
                   bus_836,
                   bus_840,
                   length_km=0.262128,
                   std_type='CF-301',
                   name='Line 18')
    pp.create_line(net,
                   bus_836,
                   bus_862,
                   length_km=0.085344,
                   std_type='CF-301',
                   name='Line 19')
    pp.create_line(net,
                   bus_842,
                   bus_844,
                   length_km=0.411480,
                   std_type='CF-301',
                   name='Line 20')
    pp.create_line(net,
                   bus_844,
                   bus_846,
                   length_km=1.109472,
                   std_type='CF-301',
                   name='Line 21')
    pp.create_line(net,
                   bus_846,
                   bus_848,
                   length_km=0.161544,
                   std_type='CF-301',
                   name='Line 22')
    pp.create_line(net,
                   bus_850,
                   bus_816,
                   length_km=0.094488,
                   std_type='CF-301',
                   name='Line 23')
    # pp.create_line(net, bus_852, bus_832, length_km=0.003048, std_type='CF-301', name='Line 24')
    pp.create_line(net,
                   bus_854,
                   bus_856,
                   length_km=7.110984,
                   std_type='CF-303',
                   name='Line 25')
    pp.create_line(net,
                   bus_854,
                   bus_852,
                   length_km=11.22578,
                   std_type='CF-301',
                   name='Line 26')
    pp.create_line(net,
                   bus_858,
                   bus_864,
                   length_km=0.493776,
                   std_type='CF-302',
                   name='Line 27')
    pp.create_line(net,
                   bus_858,
                   bus_834,
                   length_km=1.776984,
                   std_type='CF-301',
                   name='Line 28')
    pp.create_line(net,
                   bus_860,
                   bus_836,
                   length_km=0.816864,
                   std_type='CF-301',
                   name='Line 29')
    pp.create_line(net,
                   bus_860,
                   bus_838,
                   length_km=1.481328,
                   std_type='CF-304',
                   name='Line 30')
    pp.create_line(net,
                   bus_888,
                   bus_890,
                   length_km=3.218688,
                   std_type='CF-300',
                   name='Line 31')

    # Regulator 1
    pp.create_transformer_from_parameters(net,
                                          bus_814,
                                          bus_850,
                                          sn_mva=2.5,
                                          vn_hv_kv=24.9,
                                          vn_lv_kv=24.9,
                                          vkr_percent=0.320088 * 2.5,
                                          vk_percent=0.357539 * 2.5,
                                          pfe_kw=0.0,
                                          i0_percent=0.0,
                                          shift_degree=0.0,
                                          tap_side='lv',
                                          tap_neutral=0,
                                          tap_max=16,
                                          tap_min=-16,
                                          tap_step_percent=0.625,
                                          tap_pos=0,
                                          tap_phase_shifter=False,
                                          name='Regulator 1')
    # Regulator 2
    pp.create_transformer_from_parameters(net,
                                          bus_852,
                                          bus_832,
                                          sn_mva=2.5,
                                          vn_hv_kv=24.9,
                                          vn_lv_kv=24.9,
                                          vkr_percent=0.320088 * 2.5,
                                          vk_percent=0.357539 * 2.5,
                                          pfe_kw=0.0,
                                          i0_percent=0.0,
                                          shift_degree=0.0,
                                          tap_side='lv',
                                          tap_neutral=0,
                                          tap_max=16,
                                          tap_min=-16,
                                          tap_step_percent=0.625,
                                          tap_pos=0,
                                          tap_phase_shifter=False,
                                          name='Regulator 2')
    # # Substation
    # pp.create_transformer_from_parameters(net, bus0, bus_800, sn_mva=2.5, vn_hv_kv=69.0,
    #                                       vn_lv_kv=24.9, vkr_percent=1.0, vk_percent=8.062257,
    #                                       pfe_kw=0.0, i0_percent=0.0, shift_degree=0.0,
    #                                       tap_side='lv', tap_neutral=0, tap_max=2, tap_min=-2,
    #                                       tap_step_percent=2.5, tap_pos=0, tap_phase_shifter=False,
    #                                       name='Substation')
    # Traformer
    pp.create_transformer_from_parameters(net,
                                          bus_832,
                                          bus_888,
                                          sn_mva=0.5,
                                          vn_hv_kv=24.9,
                                          vn_lv_kv=4.16,
                                          vkr_percent=1.9,
                                          vk_percent=4.5,
                                          pfe_kw=0.0,
                                          i0_percent=0.0,
                                          shift_degree=0.0,
                                          name='Transformer 1')

    # Loads
    pp.create_load(net, bus_806, p_mw=0.055, q_mvar=0.029, name='Load 806')
    pp.create_load(net, bus_810, p_mw=0.016, q_mvar=0.008, name='Load 810')
    pp.create_load(net, bus_820, p_mw=0.034, q_mvar=0.017, name='Load 820')
    pp.create_load(net, bus_822, p_mw=0.135, q_mvar=0.070, name='Load 822')
    pp.create_load(net, bus_824, p_mw=0.005, q_mvar=0.002, name='Load 824')
    pp.create_load(net, bus_826, p_mw=0.004, q_mvar=0.020, name='Load 826')
    pp.create_load(net, bus_828, p_mw=0.004, q_mvar=0.002, name='Load 828')
    pp.create_load(net, bus_830, p_mw=0.007, q_mvar=0.003, name='Load 830')
    pp.create_load(net, bus_856, p_mw=0.004, q_mvar=0.002, name='Load 856')
    pp.create_load(net, bus_858, p_mw=0.015, q_mvar=0.007, name='Load 858')
    pp.create_load(net, bus_864, p_mw=0.002, q_mvar=0.001, name='Load 864')
    pp.create_load(net, bus_834, p_mw=0.032, q_mvar=0.017, name='Load 834')
    pp.create_load(net, bus_860, p_mw=0.029, q_mvar=0.073, name='Load 860')
    pp.create_load(net, bus_836, p_mw=0.082, q_mvar=0.043, name='Load 836')
    pp.create_load(net, bus_840, p_mw=0.040, q_mvar=0.020, name='Load 840')
    pp.create_load(net, bus_838, p_mw=0.028, q_mvar=0.014, name='Load 838')
    pp.create_load(net, bus_844, p_mw=0.009, q_mvar=0.005, name='Load 844')
    pp.create_load(net, bus_846, p_mw=0.037, q_mvar=0.031, name='Load 846')
    pp.create_load(net, bus_848, p_mw=0.023, q_mvar=0.011, name='Load 848')

    pp.create_load(net,
                   bus_860,
                   p_mw=0.060,
                   q_mvar=0.048,
                   name='Load 860 spot')
    pp.create_load(net,
                   bus_840,
                   p_mw=0.027,
                   q_mvar=0.021,
                   name='Load 840 spot')
    pp.create_load(net,
                   bus_844,
                   p_mw=0.405,
                   q_mvar=0.315,
                   name='Load 844 spot')
    pp.create_load(net,
                   bus_848,
                   p_mw=0.060,
                   q_mvar=0.048,
                   name='Load 848 spot')
    pp.create_load(net,
                   bus_890,
                   p_mw=0.450,
                   q_mvar=0.225,
                   name='Load 890 spot')
    pp.create_load(net,
                   bus_830,
                   p_mw=0.045,
                   q_mvar=0.020,
                   name='Load 830 spot')

    # External grid
    pp.create_ext_grid(net,
                       bus_800,
                       vm_pu=1.0,
                       va_degree=0.0,
                       s_sc_max_mva=10.0,
                       s_sc_min_mva=10.0,
                       rx_max=1,
                       rx_min=1,
                       r0x0_max=1,
                       x0x_max=1)

    # Distributed generators
    pp.create_sgen(net,
                   bus_848,
                   p_mw=0.66,
                   q_mvar=0.500,
                   name='DG 1',
                   max_p_mw=0.66,
                   min_p_mw=0,
                   max_q_mvar=0.5,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_890,
                   p_mw=0.50,
                   q_mvar=0.375,
                   name='DG 2',
                   max_p_mw=0.50,
                   min_p_mw=0,
                   max_q_mvar=0.375,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_822,
                   p_mw=0.1,
                   type='PV',
                   name='PV 1',
                   max_p_mw=0.1,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_856,
                   p_mw=0.1,
                   type='PV',
                   name='PV 2',
                   max_p_mw=0.1,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_838,
                   p_mw=0.1,
                   type='PV',
                   name='PV 3',
                   max_p_mw=0.1,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_822,
                   p_mw=0.1,
                   type='WP',
                   name='WP 1',
                   max_p_mw=0.1,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_826,
                   p_mw=0.1,
                   type='WP',
                   name='WP 2',
                   max_p_mw=0.1,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)
    pp.create_sgen(net,
                   bus_838,
                   p_mw=0.1,
                   type='WP',
                   name='WP 3',
                   max_p_mw=0.1,
                   min_p_mw=0,
                   max_q_mvar=0,
                   min_q_mvar=0)

    # Shunt capacity bank
    pp.create_shunt(net,
                    bus_840,
                    q_mvar=-0.12,
                    name='SCB 1',
                    step=4,
                    max_step=4)
    pp.create_shunt(net,
                    bus_864,
                    q_mvar=-0.12,
                    name='SCB 2',
                    step=4,
                    max_step=4)

    # storage
    pp.create_storage(net,
                      bus_810,
                      p_mw=0.5,
                      max_e_mwh=2,
                      sn_mva=1.0,
                      soc_percent=50,
                      min_e_mwh=0.2,
                      name='Storage')

    return net


# net = case34()
# pp.runpp(net)
# print(net.res_bus)
# print(net.res_ext_grid)
# print(net.trafo)
# print(net.res_load['p_mw'].values.sum())

# import numpy as np
# import pandas as pd

# import pandapower.control as control
# import pandapower.networks as nw
# import pandapower.timeseries as timeseries
# from pandapower.timeseries.data_sources.frame_data import DFData

# # number of time steps
# n_ts = 95
# # df = pd.read_csv("load_timeseries.csv")
# # create a DataFrame with some random time series as an example
# df = pd.DataFrame(np.random.normal(1., 0.1, size=(n_ts, len(net.load.index))),
#                   index=list(range(n_ts)), columns=net.load.index) * net.load.p_mw.values
# ds = DFData(df)
# const_load = control.ConstControl(net, element='load', element_index=net.load.index,
#                                   variable='p_mw', data_source=ds, profile_name=net.load.index)

# # initialising the outputwriter to save data to excel files in the current folder. You can change this to .json, .csv, or .pickle as well
# ow = timeseries.OutputWriter(net, output_path="./", output_file_type=".xlsx")
# # adding vm_pu of all buses and line_loading in percent of all lines as outputs to be stored
# ow.log_variable('res_bus', 'vm_pu')
# ow.log_variable('res_line', 'loading_percent')

# # starting the timeseries simulation for one day -> 96 15 min values.
# timeseries.run_timeseries(net)
# # now checkout the folders res_bus and res_line in your current working dir

# # number of time steps
# n_ts = 1
# # df = pd.read_csv("load_timeseries.csv")
# # create a DataFrame with some random time series as an example
# df = pd.DataFrame(np.array([[0,0]]),
#                   index=list(range(n_ts)), columns=net.trafo.index[1:])
# ds = DFData(df)
# const_load = control.ConstControl(net, element='trafo', element_index=net.trafo.index[1:],
#                                   variable='tap_pos', data_source=ds, profile_name=net.trafo.index[1:])

# # initialising the outputwriter to save data to excel files in the current folder. You can change this to .json, .csv, or .pickle as well
# ow = timeseries.OutputWriter(net, output_path="./", output_file_type=".xlsx")
# # adding vm_pu of all buses and line_loading in percent of all lines as outputs to be stored
# ow.log_variable('res_bus', 'vm_pu')
# ow.log_variable('res_line', 'loading_percent')
# ow.log_variable('res_trafo', 'tap_pos')

# # starting the timeseries simulation for one day -> 96 15 min values.
# timeseries.run_timeseries(net)
# # now checkout the folders res_bus and res_line in your current working dir
Пример #29
0
def create_ardmore_network():
    #### Create Network
    net = pp.create_empty_network()
    # create bus
    bus0 = pp.create_bus(net, vn_kv=0.4, name='bus0')  # trafo input
    bus1 = pp.create_bus(net, vn_kv=0.4, name='bus1')  # trafo output
    bus2 = pp.create_bus(net, vn_kv=0.4, name='bus2')  # house 2
    bus3 = pp.create_bus(net, vn_kv=0.4, name='bus3')  # house 3
    bus4 = pp.create_bus(net, vn_kv=0.4, name='bus4')  # house 4
    bus5 = pp.create_bus(net, vn_kv=0.4, name='bus5')  # house 5
    bus6 = pp.create_bus(net, vn_kv=0.4, name='bus6')  # house 1

    # create external grid
    pp.create_ext_grid(net, bus=bus0, vm_pu=1.02, name='Grid Connection')
    net.ext_grid["r0x0_max"] = 0.1
    net.ext_grid["x0x_max"] = 1.0
    net.ext_grid["s_sc_max_mva"] = 10000
    net.ext_grid["s_sc_min_mva"] = 8000
    net.ext_grid["rx_min"] = 0.1
    net.ext_grid["rx_max"] = 0.1

    # create new standards
    pp.create_std_type(
        net, {
            "sn_mva": 0.3,
            "vn_hv_kv": 0.4,
            "vn_lv_kv": 0.4,
            "vk_percent": 6,
            "vkr_percent": 0.78125,
            "pfe_kw": 2.7,
            "i0_percent": 0.16875,
            "shift_degree": 0,
            "vector_group": "YNyn",
            "tap_side": "hv",
            "tap_neutral": 0,
            "tap_min": -2,
            "tap_max": 2,
            "tap_step_degree": 0,
            "tap_step_percent": 2.5,
            "tap_phase_shifter": False,
            "vk0_percent": 6,
            "vkr0_percent": 0.78125,
            "mag0_percent": 100,
            "mag0_rx": 0.,
            "si0_hv_partial": 0.9,
        }, "YNyn", "trafo")

    # pp.create_std_type(net,
    #     {
    #         "max_i_ka": 313,
    #         "r_ohm_per_km": 0.164,
    #         "x_ohm_per_km": 0.117,
    #         "c_nf_per_km": 406,
    #         "r0_ohm_per_km": 0.1,
    #         "x0_ohm_per_km": 0.4,
    #         "c0_nf_per_km": 230.6,
    #     },
    #     "NAVY-J 4x185 SE 0.6/1kV", "line")

    # add trafo to the network
    trafo = pp.create_transformer(net,
                                  hv_bus=bus0,
                                  lv_bus=bus1,
                                  std_type='YNyn',
                                  parallel=1,
                                  tap_pos=0)

    # create lines
    line_0_2 = pp.create_line(net,
                              from_bus=bus1,
                              to_bus=bus2,
                              length_km=0.250,
                              std_type='NA2XS2Y 1x185 RM/25 6/10 kV')
    line_2_3 = pp.create_line(net,
                              from_bus=bus2,
                              to_bus=bus3,
                              length_km=0.0001,
                              std_type='NA2XS2Y 1x185 RM/25 6/10 kV')
    line_3_4 = pp.create_line(net,
                              from_bus=bus3,
                              to_bus=bus4,
                              length_km=0.0001,
                              std_type='NA2XS2Y 1x185 RM/25 6/10 kV')
    line_4_5 = pp.create_line(net,
                              from_bus=bus4,
                              to_bus=bus5,
                              length_km=0.0001,
                              std_type='NA2XS2Y 1x185 RM/25 6/10 kV')
    line_5_1 = pp.create_line(net,
                              from_bus=bus5,
                              to_bus=bus6,
                              length_km=0.010,
                              std_type='NA2XS2Y 1x185 RM/25 6/10 kV')
    net.line["r0_ohm_per_km"] = 0.161
    net.line["x0_ohm_per_km"] = 0.11
    net.line["c0_nf_per_km"] = 406

    # create loads
    house1 = pp.create_asymmetric_load(net,
                                       bus=bus6,
                                       sn_mva=0.15,
                                       p_A_mw=0.01,
                                       q_A_mvar=(0.015**2 - 0.01**2)**0.5,
                                       p_B_mw=0,
                                       q_B_mvar=0,
                                       p_C_mw=0,
                                       q_C_mvar=0)
    house2 = pp.create_asymmetric_load(net,
                                       bus=bus2,
                                       sn_mva=0.15,
                                       p_A_mw=0,
                                       q_A_mvar=0,
                                       p_B_mw=0.01,
                                       q_B_mvar=(0.015**2 - 0.01**2)**0.5,
                                       p_C_mw=0,
                                       q_C_mvar=0)
    house3 = pp.create_asymmetric_load(net,
                                       bus=bus3,
                                       sn_mva=0.15,
                                       p_A_mw=0,
                                       q_A_mvar=0,
                                       p_B_mw=0,
                                       q_B_mvar=0,
                                       p_C_mw=0.01,
                                       q_C_mvar=(0.015**2 - 0.01**2)**0.5)
    house4 = pp.create_asymmetric_load(
        net,
        bus=bus4,
        sn_mva=0.15,
        p_A_mw=0,
        q_A_mvar=0,
        p_B_mw=0.01,
        q_B_mvar=(0.015**2 - 0.01**2)**0.5,
        p_C_mw=0,
        q_C_mvar=0,
    )
    house5 = pp.create_asymmetric_load(
        net,
        bus=bus5,
        sn_mva=0.15,
        p_A_mw=0,
        q_A_mvar=0,
        p_B_mw=0,
        q_B_mvar=0,
        p_C_mw=0.01,
        q_C_mvar=(0.015**2 - 0.01**2)**0.5,
    )

    pp.add_zero_impedance_parameters(net)

    return net
Пример #30
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