コード例 #1
0
def test_solver1():
    sys1 = grid()
    sys1.read('./examples/kersting/kersting_ex6p1.json')  # Load data
    sys1.pf_solver = 1
    sys1.pf()  # solve power flow

    sys1.get_v()      # post process voltages
    sys1.get_i()      # post process currents

    expected_results = {
                        'v_ab': 12469.993267073232,
                        'v_an': 7199.5507766249302,
                        'v_bc': 12469.99825654443,
                        'v_bn': 7199.5575295511126,
                        'v_ca': 12469.991908615197,  
                        'v_cn': 7199.55569880254723,
                        #'deg_an': -3.3473807241894507e-05,
                        'deg_bn': -120.00002841365294,'deg_cn': 119.99996507934871, #'deg_ng': 0.0,
                        'p_a': -1799999.9999999979, 'p_b': -1800000.0000000126, 'p_c': -1799999.9999999909,
                        'q_a': -871779.78870811954, 'q_b': -871779.78870815237, 'q_c': -871779.7887081306
                        }
    for item in expected_results:
        den = expected_results[item]
        if abs(den)<0.001:
            den = 0.001
        relative_error = (sys1.buses[1][item] - expected_results[item])/den

        assert abs(relative_error)<0.001
コード例 #2
0
def test_Ygd11_3w_SC():
    data = {"buses":[{"bus": "Bus_1",  "pos_x": 10.0, "pos_y":  0.0, "units": "m", "U_kV":20.0},
                     {"bus": "Bus_2",  "pos_x": 15.0, "pos_y":  0.0, "units": "m", "U_kV":0.4}],
            "transformers":[{"bus_j": "Bus_1",  "bus_k": "Bus_2",  "S_n_kVA": 1000.0, "U_j_kV":20.0, "U_k_kV":0.4,
                        "R_cc_pu": 0.01, "X_cc_pu":0.04, "connection": "Dyg11_3w",   "conductors_j": 3, "conductors_k": 3}],
            "grid_formers":[{"bus": "Bus_1","bus_nodes": [1, 2, 3],"kV": [11.547, 11.547, 11.547], "deg": [0, 120, 240.0]}],
            "grid_feeders":[{"bus": "Bus_2","bus_nodes": [1, 2, 3],"kW": [0,0,0],"kvar": [0,0,0],"kA": [0,0,0], "phi_deg":[0, 0, 0]}]}

    # pydgrid calculation
    sys1 = grid()
    sys1.read(data)  # Load data
    sys1.pf_solver = 1
    sys1.pf()  # solve power flow
    sys1.get_v()      # post process voltages

    # positive sequence calculation
    U_1_n = data["transformers"][0]["U_j_kV"]*1000
    U_2_n = data["transformers"][0]["U_k_kV"]*1000
    r_t = U_1_n/U_2_n

    V_2_manual  = U_1_n/np.sqrt(3)/r_t*np.exp(1j*np.deg2rad(30))
    V_2_pydgrid = sys1.buses[1]['v_an']*np.exp(1j*np.deg2rad(sys1.buses[1]['deg_an']))
    print('V_2_manual',V_2_manual)
    print('V_2_pydgrid',V_2_pydgrid)
    error = V_2_manual - V_2_pydgrid
    assert abs(error)<0.001
コード例 #3
0
def test_Dyn11_SC():
    '''
    Short circuit like test
    '''
    data = {
        "buses":[{"bus": "Bus_1",  "pos_x": 10.0, "pos_y":  0.0, "units": "m", "U_kV":0.4},
                 {"bus": "Bus_2",  "pos_x": 15.0, "pos_y":  0.0, "units": "m", "U_kV":0.4}],
        "transformers":[{"bus_j": "Bus_1",  "bus_k": "Bus_2",  "S_n_kVA": 1000.0, "U_j_kV":20.0, "U_k_kV":0.4,
                        "R_cc_pu": 0.01, "X_cc_pu":0.04, "connection": "Dyn11",   "conductors_j": 3, "conductors_k": 4}],
        "grid_formers":[{"bus": "Bus_1","bus_nodes": [1, 2, 3],"kV": [11.547, 11.547, 11.547], "deg": [0, 120, 240.0]}],
        "grid_feeders":[{"bus": "Bus_2","bus_nodes": [1, 2, 3],"kW": [0,0,0],
                         "kvar": [0,0,0],"kA": [0,0,0], "phi_deg":[0, 0, 0]}],
        "shunts":[{"bus": "Bus_2" , "R": 0.001, "X": 0.0, "bus_nodes": [4,0]},
                  {"bus": "Bus_2" , "R": 1.0e-8, "X": 0.0, "bus_nodes": [1,0]},
                  {"bus": "Bus_2" , "R": 1.0e-8, "X": 0.0, "bus_nodes": [2,0]},
                  {"bus": "Bus_2" , "R": 1.0e-8, "X": 0.0, "bus_nodes": [3,0]}]}

    U_1_n = data["transformers"][0]["U_j_kV"]*1000
    U_2_n = data["transformers"][0]["U_k_kV"]*1000

    R_cc_pu = data["transformers"][0]["R_cc_pu"]
    X_cc_pu = data["transformers"][0]["X_cc_pu"]
    Z_cc_pu = R_cc_pu + 1j*X_cc_pu

    V_cc = np.abs(Z_cc_pu)*U_1_n/np.sqrt(3)
    V_cc_kV = V_cc/1000
    data["grid_formers"][0]["kV"] = [V_cc_kV, V_cc_kV, V_cc_kV]

    # pydgrid calculation
    sys1 = grid()
    sys1.read(data)  # Load data
    sys1.pf_solver = 1
    sys1.pf()  # solve power flow
    sys1.get_v()  # post process voltages
    sys1.get_i()

    p_a,p_b,p_c = sys1.buses[0]['p_a'],sys1.buses[0]['p_b'],sys1.buses[0]['p_c']
    p_cc = p_a + p_b + p_c
    i_1a_m = sys1.transformers[0]['i_1a_m']
    R_cc_pydgrid = p_cc/(3*i_1a_m**2)
    Z_cc_pydgrid = V_cc/i_1a_m
    X_cc_pydgrid = np.sqrt(Z_cc_pydgrid**2 - R_cc_pydgrid**2)
    Z_b = U_1_n**2/1000.0e3
    R_cc_pu_pydgrid = R_cc_pydgrid/Z_b
    X_cc_pu_pydgrid = X_cc_pydgrid/Z_b
    Z_cc_pu_pydgrid = R_cc_pu_pydgrid + 1j*X_cc_pu_pydgrid
    print('Z_cc_pu',Z_cc_pu)
    print('Z_cc_pu_pydgrid',Z_cc_pu_pydgrid)
    error = Z_cc_pu - Z_cc_pu_pydgrid
    assert abs(error)<0.001
コード例 #4
0
            "V_dc": 800.0,
            "soc_max_kWh": 300.0,
            "soc_ini_kWh": 100.0,
            "source_mode": "grid_former",
            "L": 1.0e-3,
            "R": 1.0,
            "R_0": 0.1,
            "R_1": 0.2,
            "C_1": 100.0,
            "K_v": 1.0,
            "K_ang": 0.0
        }
    }
}

grid_1 = grid()
grid_1.read(data)  # Load data
simu_1 = simu(data, grid_1)

grid_1.pf()  # solve power flow

t = 0.0
ini_eval(t, grid_1.params_pf, simu_1.params_simu, simu_1.params_bess_vsc)

T, V_nodes, I_nodes, X = run_eval(10, grid_1.params_pf, simu_1.params_simu,
                                  simu_1.params_bess_vsc)

grid_1.get_v()  # post process voltages
grid_1.get_i()  # post process currents
#v_2_a,v_2_b,v_2_c,t = phasor2time(sys1.v_abc('Bus_3'))
#i_2_a,i_2_b,i_2_c,t = phasor2time(sys1.i_abc('Bus_3'))
コード例 #5
0
def test_no_gnd():
    '''
    Transformer without grounding.
    Fault from a phase to ground.
    Under this condition it is supposed that there are no fault currents and overvoltage is espected.
    
    '''
    data = {
        "transformers": [{
            "bus_j": "B0",
            "bus_k": "B1",
            "S_n_kVA": 1500.0,
            "U_j_kV": 66.0,
            "U_k_kV": 20.0,
            "R_cc_pu": 0.01,
            "X_cc_pu": 0.04,
            "connection": "Ygd11_3w",
            "conductors_1": 3,
            "conductors_2": 3
        }],
        "lines": [{
            "bus_j": "B1",
            "bus_k": "B2",
            "code": "pry_al_120",
            "m": 200.0
        }],
        "buses": [{
            "bus": "B0",
            "pos_x": 0,
            "pos_y": 0,
            "units": "m",
            "U_kV": 66.0
        }, {
            "bus": "B1",
            "pos_x": 10,
            "pos_y": 0,
            "units": "m",
            "U_kV": 20.0
        }, {
            "bus": "B2",
            "pos_x": 200,
            "pos_y": 0,
            "units": "m",
            "U_kV": 20.0
        }],
        "grid_formers": [{
            "bus": "B0",
            "bus_nodes": [1, 2, 3],
            "deg": [0, -120, -240],
            "kV": [38.105, 38.105, 38.105]
        }],
        "grid_feeders": [{
            "bus": "B2",
            "bus_nodes": [1, 2, 3],
            "kW": [0, 0, 0],
            "kvar": [0, 0, 0],
            "kA": [0, 0, 0],
            "phi_deg": [30, 30, 30]
        }],
        "line_codes": {
            "pry_al_50": {
                "R1": 0.8,
                "X1": 0.148,
                "R0": 0.8,
                "X0": 0.148
            },
            "pry_al_95": {
                "R1": 0.403,
                "X1": 0.129,
                "R0": 0.403,
                "X0": 0.129
            },
            "pry_al_120": {
                "R1": 0.321,
                "X1": 0.123,
                "R0": 0.321,
                "X0": 0.321
            },
            "pry_al_185": {
                "R1": 0.209,
                "X1": 0.113,
                "R0": 0.209,
                "X0": 0.209
            },
            "pry_al_300": {
                "R1": 0.128,
                "X1": 0.105,
                "R0": 0.128,
                "X0": 0.128
            }
        },
        "shunts": [
            {
                "bus": "B1",
                "R": 1e12,
                "X": 0.0,
                "bus_nodes": [1, 0]
            },
            {
                "bus": "B1",
                "R": 1e12,
                "X": 0.0,
                "bus_nodes": [2, 0]
            },
            {
                "bus": "B1",
                "R": 1e12,
                "X": 0.0,
                "bus_nodes": [3, 0]
            },
            {
                "bus": "B2",
                "R": 1e-12,
                "X": 0.0,
                "bus_nodes": [1, 0]
            }  # applied fault
        ]
    }

    grid_1 = grid()
    grid_1.read(data)  # Load data
    grid_1.pf_solver = 1
    grid_1.pf()  # solve power flow
    grid_1.get_v()  # post process voltages
    grid_1.get_i()  # post process currents

    assert grid_1.buses[1]['v_an'] < 0.001
    assert grid_1.buses[1]['v_bn'] > 20e3 * 0.999
    assert grid_1.buses[1]['v_cn'] > 20e3 * 0.999
    assert grid_1.lines[0]['i_a_m'] < 0.001
コード例 #6
0
def test_zigzag_gnd():
    '''
    Transformer without grounding.
    Grounding with zig-zag.
    Fault from a phase to ground.
    Under this condition it is supposed that there are fault current limited by grounding impedance.
    Overvoltages should be less than in the previous ungrounded  case.
    
    '''
    Z_b = (20.0e3)**2 / 1500.0e3
    Z_cc = (0.01 + 1j * 0.04) * Z_b

    data = {
        "transformers": [{
            "bus_j": "Bus_0",
            "bus_k": "Bus_1",
            "S_n_kVA": 15000.0,
            "U_1_kV": 66.0,
            "U_2_kV": 20.0,
            "R_cc_pu": 0.01,
            "X_cc_pu": 0.04,
            "connection": "Ygd11_3w",
            "conductors_1": 3,
            "conductors_2": 3
        }],
        "lines": [{
            "bus_j": "Bus_1",
            "bus_k": "Bus_2",
            "code": "pry_al_120",
            "m": 0.1
        }],
        "buses": [{
            "bus": "Bus_0",
            "pos_x": 0,
            "pos_y": 0,
            "units": "m",
            "U_kV": 66.0
        }, {
            "bus": "Bus_1",
            "pos_x": 10,
            "pos_y": 0,
            "units": "m",
            "U_kV": 20.0
        }, {
            "bus": "Bus_2",
            "pos_x": 200,
            "pos_y": 0,
            "units": "m",
            "U_kV": 20.0
        }],
        "grid_formers": [{
            "bus": "Bus_0",
            "bus_nodes": [1, 2, 3],
            "deg": [0, -120, -240],
            "kV": [38.105, 38.105, 38.105]
        }],
        "grid_feeders": [{
            "bus": "Bus_2",
            "bus_nodes": [1, 2, 3],
            "kW": [0, 0, 0],
            "kvar": [0, 0, 0],
            "kA": [0, 0, 0],
            "phi_deg": [30, 30, 30]
        }],
        "line_codes": {
            "pry_al_50": {
                "R1": 0.8,
                "X1": 0.148,
                "R0": 0.8,
                "X0": 0.148
            },
            "pry_al_95": {
                "R1": 0.403,
                "X1": 0.129,
                "R0": 0.403,
                "X0": 0.129
            },
            "pry_al_120": {
                "R1": 0.321,
                "X1": 0.123,
                "R0": 0.321,
                "X0": 0.321
            },
            "pry_al_185": {
                "R1": 0.209,
                "X1": 0.113,
                "R0": 0.209,
                "X0": 0.209
            },
            "pry_al_300": {
                "R1": 0.128,
                "X1": 0.105,
                "R0": 0.128,
                "X0": 0.128
            }
        },
        "shunts": [
            {
                "bus": "Bus_2",
                "R": 1e-12,
                "X": 0.0,
                "bus_nodes": [1, 0]
            },
            #{"bus": "Bus_2" , "R": 1e-12, "X": 0.0, "bus_nodes": [2,0]},
            #{"bus": "Bus_2" , "R": 1e-12, "X": 0.0, "bus_nodes": [3,0]},
        ],
        "groundings": [{
            "bus": "Bus_1",
            "R_gnd": Z_cc.real,
            "X_gnd": Z_cc.imag,
            "conductors": 3
        }]
    }

    grid_1 = grid()
    grid_1.read(data)  # Load data
    grid_1.pf_solver = 1
    grid_1.pf()  # solve power flow
    grid_1.get_v()  # post process voltages
    grid_1.get_i()  # post process currents

    I_cc = np.abs((20.0e3 / np.sqrt(3)) / (Z_cc))

    assert grid_1.buses[1]['v_an'] < 10.0
    assert grid_1.buses[1]['v_bn'] < 20e3 * 0.9
    assert grid_1.buses[1]['v_cn'] < 20e3 * 0.9
    assert grid_1.lines[0]['i_a_m'] > I_cc * 0.8
コード例 #7
0
        "pry_al_185": {
            "R1": 0.209,
            "X1": 0.113,
            "R0": 0.209,
            "X0": 0.209
        },
        "pry_al_300": {
            "R1": 0.128,
            "X1": 0.105,
            "R0": 0.128,
            "X0": 0.128
        }
    },
}

sys1 = grid()
sys1.read(data)  # Load data
sys1.pf()  # solve power flow
sys1.get_v()  # post process voltages
sys1.get_i()  # post process currents

v_2_a, v_2_b, v_2_c = phasor2time(sys1.v_abc('Bus_3'))
i_2_a, i_2_b, i_2_c = phasor2time(sys1.i_abc('Bus_3'))
p, q, q_lipo = pq(sys1.v_abc('Bus_3'), sys1.i_abc('Bus_3'))

if __name__ == "__main__":
    pass

#    test_Dyn11()
#    test_Dyg11_3w()
コード例 #8
0
def test_trafos_OC():

    trafos_list = [
        ('Dyn11', 'gnd_k', -30),
        ('Dyn1', 'gnd_k', 30),
        ('Dyg11_3w', '3wires', -30),
        ('Ynd11', 'gnd_j', -30),
        #('Ygd11_3w','3wires',-30),
        #('Ygd5_3w','3wires',-60),
        ('Yy_3wires', '3wires', 0)
    ]

    U_j_n = 20.0  # kV
    U_k_n = 0.42  # kV
    S_n = 630.0  # kVA
    V_j_n = U_j_n / np.sqrt(3)

    for connection, gnd, phase in trafos_list:
        if gnd == 'gnd_k':
            data = {
                "buses": [{
                    "bus": "Bus_1",
                    "pos_x": 10.0,
                    "pos_y": 0.0,
                    "units": "m",
                    "U_kV": U_j_n
                }, {
                    "bus": "Bus_2",
                    "pos_x": 15.0,
                    "pos_y": 0.0,
                    "units": "m",
                    "U_kV": U_k_n
                }],
                "transformers": [{
                    "bus_j": "Bus_1",
                    "bus_k": "Bus_2",
                    "S_n_kVA": S_n,
                    "U_j_kV": U_j_n,
                    "U_k_kV": U_k_n,
                    "R_cc_pu": 0.01,
                    "X_cc_pu": 0.04,
                    "connection": connection,
                    "conductors_j": 3,
                    "conductors_k": 4
                }],
                "grid_formers": [{
                    "bus": "Bus_1",
                    "bus_nodes": [1, 2, 3],
                    "kV": [V_j_n, V_j_n, V_j_n],
                    "deg": [0, 120, 240.0]
                }],
                "shunts": [{
                    "bus": "Bus_2",
                    "R": 0.00001,
                    "X": 0.0,
                    "bus_nodes": [4, 0]
                }]
            }
        if gnd == '3wires':
            data = {
                "buses": [{
                    "bus": "Bus_1",
                    "pos_x": 10.0,
                    "pos_y": 0.0,
                    "units": "m",
                    "U_kV": U_j_n
                }, {
                    "bus": "Bus_2",
                    "pos_x": 15.0,
                    "pos_y": 0.0,
                    "units": "m",
                    "U_kV": U_k_n
                }],
                "transformers": [{
                    "bus_j": "Bus_1",
                    "bus_k": "Bus_2",
                    "S_n_kVA": S_n,
                    "U_j_kV": U_j_n,
                    "U_k_kV": U_k_n,
                    "R_cc_pu": 0.01,
                    "X_cc_pu": 0.04,
                    "connection": connection,
                    "conductors_j": 3,
                    "conductors_k": 3
                }],
                "grid_formers": [{
                    "bus": "Bus_1",
                    "bus_nodes": [1, 2, 3],
                    "kV": [V_j_n, V_j_n, V_j_n],
                    "deg": [0, 120, 240.0]
                }],
                "shunts": [{
                    "bus": "Bus_2",
                    "R": 100.0e6,
                    "X": 0.0,
                    "bus_nodes": [1, 0]
                }]
            }

        # pydgrid calculation
        sys1 = grid()
        sys1.read(data)  # Load data
        sys1.pf()  # solve power flow

        # positive sequence calculation
        r_t_theoretic = U_j_n / U_k_n
        r_t_model = data["buses"][0]["v_ab"] / data["buses"][1]["v_ab"]

        error_rt = r_t_theoretic - r_t_model
        assert abs(error_rt) < 0.001

        phase_shift_theoretic = phase
        phase_shift_model = data["buses"][0]["deg_an"] - data["buses"][1][
            "deg_an"]
        error_angle = phase_shift_theoretic - phase_shift_model
        assert abs(error_angle) < 0.001
コード例 #9
0
def test_trafos_SC():

    trafos_list = [
        ('Dyn11', 'gnd_k', -30),
        ('Dyn1', 'gnd_k', 30),
        ('Dyg11_3w', '3wires', -30),
        ('Ynd11', 'gnd_j', -30),
        ('Ygd11_3w', '3wires', -30),
        #('Ygd5_3w','3wires',-60),
        ('Yy_3wires', '3wires', 0)
    ]

    U_j_n = 20.0  # kV
    U_k_n = 0.42  # kV
    S_n = 630.0  # kVA

    R_cc_pu = 0.01
    X_cc_pu = 0.04

    I_nom = S_n * 1000 / (np.sqrt(3) * U_j_n * 1000.0)
    Z_base = (1000 * U_j_n)**2 / (S_n * 1000)

    Z_cc = (R_cc_pu + 1j * X_cc_pu) * Z_base

    V_j_n = np.abs(I_nom * Z_cc) / 1000.0

    for connection, gnd, phase in trafos_list:

        if gnd == 'gnd_j':
            data = {
                "buses": [{
                    "bus": "Bus_1",
                    "pos_x": 10.0,
                    "pos_y": 0.0,
                    "units": "m",
                    "U_kV": U_j_n
                }, {
                    "bus": "Bus_2",
                    "pos_x": 15.0,
                    "pos_y": 0.0,
                    "units": "m",
                    "U_kV": U_k_n
                }],
                "transformers": [{
                    "bus_j": "Bus_1",
                    "bus_k": "Bus_2",
                    "S_n_kVA": S_n,
                    "U_j_kV": U_j_n,
                    "U_k_kV": U_k_n,
                    "R_cc_pu": 0.01,
                    "X_cc_pu": 0.04,
                    "connection": connection,
                    "conductors_j": 4,
                    "conductors_k": 3
                }],
                "grid_formers": [{
                    "bus": "Bus_1",
                    "bus_nodes": [1, 2, 3],
                    "kV": [V_j_n, V_j_n, V_j_n],
                    "deg": [0, 120, 240.0]
                }],
                "shunts": [{
                    "bus": "Bus_1",
                    "R": 0.00001,
                    "X": 0.0,
                    "bus_nodes": [4, 0]
                }, {
                    "bus": "Bus_2",
                    "R": 0.00001,
                    "X": 0.0,
                    "bus_nodes": [1, 2]
                }, {
                    "bus": "Bus_2",
                    "R": 0.00001,
                    "X": 0.0,
                    "bus_nodes": [2, 3]
                }]
            }

        if gnd == 'gnd_k':
            data = {
                "buses": [{
                    "bus": "Bus_1",
                    "pos_x": 10.0,
                    "pos_y": 0.0,
                    "units": "m",
                    "U_kV": U_j_n
                }, {
                    "bus": "Bus_2",
                    "pos_x": 15.0,
                    "pos_y": 0.0,
                    "units": "m",
                    "U_kV": U_k_n
                }],
                "transformers": [{
                    "bus_j": "Bus_1",
                    "bus_k": "Bus_2",
                    "S_n_kVA": S_n,
                    "U_j_kV": U_j_n,
                    "U_k_kV": U_k_n,
                    "R_cc_pu": 0.01,
                    "X_cc_pu": 0.04,
                    "connection": connection,
                    "conductors_j": 3,
                    "conductors_k": 4
                }],
                "grid_formers": [{
                    "bus": "Bus_1",
                    "bus_nodes": [1, 2, 3],
                    "kV": [V_j_n, V_j_n, V_j_n],
                    "deg": [0, 120, 240.0]
                }],
                "shunts": [{
                    "bus": "Bus_2",
                    "R": 0.00001,
                    "X": 0.0,
                    "bus_nodes": [4, 0]
                }, {
                    "bus": "Bus_2",
                    "R": 0.00001,
                    "X": 0.0,
                    "bus_nodes": [1, 2]
                }, {
                    "bus": "Bus_2",
                    "R": 0.00001,
                    "X": 0.0,
                    "bus_nodes": [2, 3]
                }]
            }

        if gnd == '3wires':
            data = {
                "buses": [{
                    "bus": "Bus_1",
                    "pos_x": 10.0,
                    "pos_y": 0.0,
                    "units": "m",
                    "U_kV": U_j_n
                }, {
                    "bus": "Bus_2",
                    "pos_x": 15.0,
                    "pos_y": 0.0,
                    "units": "m",
                    "U_kV": U_k_n
                }],
                "transformers": [{
                    "bus_j": "Bus_1",
                    "bus_k": "Bus_2",
                    "S_n_kVA": S_n,
                    "U_j_kV": U_j_n,
                    "U_k_kV": U_k_n,
                    "R_cc_pu": 0.01,
                    "X_cc_pu": 0.04,
                    "connection": connection,
                    "conductors_j": 3,
                    "conductors_k": 3
                }],
                "grid_formers": [{
                    "bus": "Bus_1",
                    "bus_nodes": [1, 2, 3],
                    "kV": [V_j_n, V_j_n, V_j_n],
                    "deg": [0, 120, 240.0]
                }],
                "shunts": [{
                    "bus": "Bus_2",
                    "R": 0.00001,
                    "X": 0.0,
                    "bus_nodes": [1, 2]
                }, {
                    "bus": "Bus_2",
                    "R": 0.00001,
                    "X": 0.0,
                    "bus_nodes": [2, 3]
                }]
            }

        # pydgrid calculation
        sys1 = grid()
        sys1.read(data)  # Load data
        sys1.pf()  # solve power flow

        # positive sequence calculation
        r_t_theoretic = U_j_n / U_k_n
        i_1a_m = sys1.transformers[0]['i_1a_m']
        i_2a_m = sys1.transformers[0]['i_2a_m']
        r_t_model = i_2a_m / i_1a_m
        error_rt = r_t_theoretic - r_t_model
        assert abs(error_rt) < 100.0

        i_1a_m = sys1.transformers[0]['i_1a_m']
        print('I_nom', I_nom)
        print(connection, 'i_1a_m', i_1a_m)
        error_icc = (I_nom - i_1a_m) / I_nom
        assert abs(error_icc) < 0.001

        i_1b_m = sys1.transformers[0]['i_1b_m']
        print('I_nom', I_nom)
        print(connection, 'i_1b_m', i_1b_m)
        error_icc = (I_nom - i_1b_m) / I_nom
        assert abs(error_icc) < 0.001

        i_1c_m = sys1.transformers[0]['i_1c_m']
        print('I_nom', I_nom)
        print(connection, 'i_1c_m', i_1c_m)
        error_icc = (I_nom - i_1c_m) / I_nom
        assert abs(error_icc) < 0.001
コード例 #10
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Sep  8 09:15:54 2017

@author: jmmauricio
"""

import pydgrid

sys1 = pydgrid.grid()
コード例 #11
0
def test_pr_mt_h():
    ''' Test that positive sequence phasor calculations match pydgrid result'''
    data = {
        "lines": [{
            "bus_j": "Bus_1",
            "bus_k": "Bus_2",
            "code": "RX",
            "m": 200
        }],
        "buses": [{
            "bus": "Bus_1",
            "pos_x": 10,
            "pos_y": 0,
            "units": "m",
            "U_kV": 0.4
        }, {
            "bus": "Bus_2",
            "pos_x": 200,
            "pos_y": 0,
            "units": "m",
            "U_kV": 0.4
        }],
        "grid_formers": [{
            "bus": "Bus_1",
            "bus_nodes": [1, 2, 3],
            "kV": [11.547, 11.547, 11.547],
            "deg": [0, 120, 240.0]
        }],
        "grid_feeders": [{
            "bus": "Bus_2",
            "bus_nodes": [1, 2, 3],
            "kW": [0, 0, 0],
            "kvar": [0, 0, 0],
            "kA": [-0.245, -0.245, -0.245],
            "phi_deg": [-36.8698976, -36.8698976, -36.8698976]
        }],
        "line_codes": {
            "RX": {
                "R1": 0.277,
                "X1": 0.11,
                "R0": 0.0,
                "X0": 0.01
            }
        }
    }

    # pydgrid calculation
    sys1 = grid()
    sys1.read(data)  # Load data
    sys1.pf_solver = 1
    sys1.pf()  # solve power flow
    sys1.get_v()  # post process voltages
    sys1.get_i()  # post process currents
    #    I_12_pydgrid = sys1.lines[0]['i_a_m']
    #
    #    # positive sequence "manual" calculation
    V_1_m = sys1.buses[0]['v_an']
    V_2_m = sys1.buses[1]['v_an']

    DV = V_1_m - V_2_m
    DU_pydgrid = np.sqrt(3) * DV
    DU_catalog = 24.41

    # comparison
    error = DU_pydgrid - DU_catalog

    assert abs(error) < 0.001
コード例 #12
0
def test_line_sequence_z():
    ''' Test that positive sequence phasor calculations match pydgrid result'''
    data = {
        "lines": [{
            "bus_j": "Bus_1",
            "bus_k": "Bus_2",
            "code": "RX",
            "m": 1000
        }],
        "buses": [{
            "bus": "Bus_1",
            "pos_x": 10,
            "pos_y": 0,
            "units": "m",
            "U_kV": 0.4
        }, {
            "bus": "Bus_2",
            "pos_x": 200,
            "pos_y": 0,
            "units": "m",
            "U_kV": 0.4
        }],
        "grid_formers": [{
            "bus": "Bus_1",
            "bus_nodes": [1, 2, 3],
            "kV": [11.547, 11.547, 11.547],
            "deg": [0, 120, 240.0]
        }],
        "loads": [{
            "bus": "Bus_2",
            "kVA": 2000.0,
            "pf": 0.9,
            "type": "3P"
        }],
        "line_codes": {
            "RX": {
                "R1": 0.8,
                "X1": 0.6,
                "R0": 2.4,
                "X0": 1.8
            }
        }
    }

    # pydgrid calculation
    sys1 = grid()
    sys1.read(data)  # Load data
    sys1.pf_solver = 1
    sys1.pf()  # solve power flow
    sys1.get_v()  # post process voltages
    sys1.get_i()  # post process currents
    I_12_pydgrid = sys1.lines[0]['i_a_m']

    # positive sequence "manual" calculation
    V_1_m = sys1.buses[0]['v_an']
    V_2_m = sys1.buses[1]['v_an']
    theta_1 = np.deg2rad(sys1.buses[0]['deg_an'])
    theta_2 = np.deg2rad(sys1.buses[1]['deg_an'])
    V_1 = V_1_m * np.exp(1j * theta_1)
    V_2 = V_2_m * np.exp(1j * theta_2)
    R_1 = data["line_codes"]["RX"]["R1"]
    X_1 = data["line_codes"]["RX"]["X1"]
    Z_1 = R_1 + 1j * X_1
    I_12_manual = np.abs((V_1 - V_2) / Z_1)

    # comparison
    error = I_12_manual - I_12_pydgrid

    assert abs(error) < 0.001
コード例 #13
0
def test_vsc_leon():

    p_ref = 600.0e3
    q_ref = 200.0e3

    data = {
        "lines": [{
            "bus_j": "Bus_1",
            "bus_k": "Bus_2",
            "code": "UG1w3",
            "m": 200
        }, {
            "bus_j": "Bus_1",
            "bus_k": "Bus_3",
            "code": "UG1w3",
            "m": 200
        }],
        "buses": [{
            "bus": "Bus_1",
            "pos_x": 0.0,
            "pos_y": 0,
            "units": "m",
            "U_kV": 0.4
        }, {
            "bus": "Bus_2",
            "pos_x": 110.0,
            "pos_y": 20,
            "units": "m",
            "U_kV": 0.4
        }, {
            "bus": "Bus_3",
            "pos_x": 110.0,
            "pos_y": -20,
            "units": "m",
            "U_kV": 0.4
        }],
        "grid_formers": [{
            "bus": "Bus_1",
            "bus_nodes": [1, 2, 3],
            "deg": [18.43101738, -103.41207707, 144.94884128],
            "kV": [0.24982762, 0.21600212, 0.22831829]
        }],
        "grid_feeders": [{
            "bus": "Bus_2",
            "bus_nodes": [1, 2, 3],
            "kW": [0, 0, 0],
            "kvar": [0, 0, 0],
            "kA": [0, 0, 0],
            "phi_deg": [30, 30, 30]
        }, {
            "bus": "Bus_3",
            "bus_nodes": [1, 2, 3],
            "type": "vsc",
            "control_type": "pq_leon",
            "kW": p_ref / 1000,
            "kvar": q_ref / 1000,
            "L": 400e-6,
            "R": 0.01,
            "V_dc": 800.0
        }],
        "line_codes": {
            "pry_al_50": {
                "R1": 0.8,
                "X1": 0.148,
                "R0": 0.8,
                "X0": 0.148
            },
            "pry_al_95": {
                "R1": 0.403,
                "X1": 0.129,
                "R0": 0.403,
                "X0": 0.129
            },
            "pry_al_120": {
                "R1": 0.321,
                "X1": 0.123,
                "R0": 0.321,
                "X0": 0.321
            },
            "pry_al_185": {
                "R1": 0.209,
                "X1": 0.113,
                "R0": 0.209,
                "X0": 0.209
            },
            "pry_al_300": {
                "R1": 0.128,
                "X1": 0.105,
                "R0": 0.128,
                "X0": 0.128
            }
        },
    }

    sys1 = grid()
    sys1.read(data)  # Load data
    sys1.pf()  # solve power flow
    sys1.get_v()  # post process voltages
    sys1.get_i()  # post process currents

    v_2_a, v_2_b, v_2_c, t = phasor2time(sys1.v_abc('Bus_3'))
    i_2_a, i_2_b, i_2_c, t = phasor2time(sys1.i_abc('Bus_3'))
    p, q, q_lipo, t = pq(sys1.v_abc('Bus_3'), sys1.i_abc('Bus_3'))

    assert np.abs(p_ref - np.average(p)) < 1.0
    assert np.abs(q_ref - np.average(q)) < 1.0
    assert np.abs(p_ref - np.max(p)) < 1.0
    assert np.abs(p_ref - np.min(p)) < 1.0
コード例 #14
0
def test_wind_farm_ss():
    p_gen = 2000.0  # kW
    q_gen = 0  # kvar

    p_statcom = 0.0  # kW
    q_statcom = 0.0  # kvar

    data = {
        "lines": [
            {
                "bus_j": "W1mv",
                "bus_k": "W2mv",
                "code": "mv_al_300",
                "m": 500
            },
            {
                "bus_j": "W2mv",
                "bus_k": "W3mv",
                "code": "mv_al_300",
                "m": 500
            },
            {
                "bus_j": "W3mv",
                "bus_k": "POImv",
                "code": "mv_al_300",
                "m": 500
            },
            {
                "bus_j": "POI",
                "bus_k": "GRID",
                "code": "hv_line",
                "m": 50.0e3
            },
        ],
        "buses": [
            {
                "bus": "W1lv",
                "pos_x": -1500.0,
                "pos_y": 200.0,
                "units": "m",
                "U_kV": 0.69
            },
            {
                "bus": "W2lv",
                "pos_x": -1000.0,
                "pos_y": 200.0,
                "units": "m",
                "U_kV": 0.69
            },
            {
                "bus": "W3lv",
                "pos_x": -500.0,
                "pos_y": 200.0,
                "units": "m",
                "U_kV": 0.69
            },
            {
                "bus": "W1mv",
                "pos_x": -1500.0,
                "pos_y": 180.0,
                "units": "m",
                "U_kV": 20.0
            },
            {
                "bus": "W2mv",
                "pos_x": -1000.0,
                "pos_y": 180.0,
                "units": "m",
                "U_kV": 20.0
            },
            {
                "bus": "W3mv",
                "pos_x": -500.0,
                "pos_y": 180.0,
                "units": "m",
                "U_kV": 20.0
            },
            {
                "bus": "POImv",
                "pos_x": 0.0,
                "pos_y": 0.0,
                "units": "m",
                "U_kV": 20.0
            },
            {
                "bus": "POI",
                "pos_x": 100.0,
                "pos_y": 0.0,
                "units": "m",
                "U_kV": 66.0
            },
            {
                "bus": "GRID",
                "pos_x": 500.0,
                "pos_y": 0.0,
                "units": "m",
                "U_kV": 66.0
            },
        ],
        "transformers": [
            {
                "bus_j": "POImv",
                "bus_k": "POI",
                "S_n_kVA": 10000.0,
                "U_1_kV": 20.0,
                "U_2_kV": 66.0,
                "R_cc_pu": 0.01,
                "X_cc_pu": 0.08,
                "connection": "Dyg11_3w",
                "conductors_1": 3,
                "conductors_2": 3
            },
            {
                "bus_j": "W1mv",
                "bus_k": "W1lv",
                "S_n_kVA": 2500.0,
                "U_1_kV": 20,
                "U_2_kV": 0.69,
                "R_cc_pu": 0.01,
                "X_cc_pu": 0.06,
                "connection": "Dyg11_3w",
                "conductors_1": 3,
                "conductors_2": 3
            },
            {
                "bus_j": "W2mv",
                "bus_k": "W2lv",
                "S_n_kVA": 2500.0,
                "U_1_kV": 20,
                "U_2_kV": 0.69,
                "R_cc_pu": 0.01,
                "X_cc_pu": 0.06,
                "connection": "Dyg11_3w",
                "conductors_1": 3,
                "conductors_2": 3
            },
            {
                "bus_j": "W3mv",
                "bus_k": "W3lv",
                "S_n_kVA": 2500.0,
                "U_1_kV": 20,
                "U_2_kV": 0.69,
                "R_cc_pu": 0.01,
                "X_cc_pu": 0.06,
                "connection": "Dyg11_3w",
                "conductors_1": 3,
                "conductors_2": 3
            },
        ],
        "grid_formers": [{
            "bus": "GRID",
            "bus_nodes": [1, 2, 3],
            "kV": [38.105, 38.105, 38.105],
            "deg": [30, 150, 270.0]
        }],
        "grid_feeders": [
            {
                "bus": "W1lv",
                "bus_nodes": [1, 2, 3],
                "kW": p_gen,
                "kvar": q_gen
            },
            {
                "bus": "W2lv",
                "bus_nodes": [1, 2, 3],
                "kW": p_gen,
                "kvar": q_gen
            },
            {
                "bus": "W3lv",
                "bus_nodes": [1, 2, 3],
                "kW": p_gen,
                "kvar": q_gen
            },
            {
                "bus": "POImv",
                "bus_nodes": [1, 2, 3],
                "kW": p_statcom,
                "kvar": q_statcom
            }  # STATCOM
        ],
        "groundings": [{
            "bus": "POImv",
            "R_gnd": 32.0,
            "X_gnd": 0.0,
            "conductors": 3
        }],
        "line_codes": {
            "mv_al_150": {
                "R1": 0.262,
                "X1": 0.118,
                "C_1_muF": 0.250
            },
            "mv_al_185": {
                "R1": 0.209,
                "X1": 0.113,
                "C_1_muF": 0.281
            },
            "mv_al_240": {
                "R1": 0.161,
                "X1": 0.109,
                "C_1_muF": 0.301
            },
            "mv_al_300": {
                "R1": 0.128,
                "X1": 0.105,
                "C_1_muF": 0.340
            },
            "hv_line": {
                "R1": 0.219,
                "X1": 0.365,
                "R0": 0.219,
                "X0": 0.365
            }
        }
    }

    grid_1 = grid()
    grid_1.read(data)  # Load data
    grid_1.pf()  # solve power flow
    mon = grid_1.monitor(bus_from='POI', bus_to='GRID')

    assert abs(mon.P -
               5910895.785662318) < 1  # from case resolved in november 2018
    assert abs(mon.Q - (
        -490329.45241958584)) < 10  # from case resolved in november 2018
コード例 #15
0
def test_ieee4bus_Dyn11():
    feet2m = 0.3048
    mile2m = 1609.34
    mile2km = mile2m / 1000
    inch2m = 0.0253999368683

    # Results from IEEE

    V2_ag = 12350 * np.exp(1j * np.deg2rad(29.6))
    V2_bg = 12314 * np.exp(1j * np.deg2rad(-90.4))
    V2_cg = 12333 * np.exp(1j * np.deg2rad(149.8))

    V3_ag = 2290 * np.exp(1j * np.deg2rad(-32.4))
    V3_bg = 2261 * np.exp(1j * np.deg2rad(-153.8))
    V3_cg = 2214 * np.exp(1j * np.deg2rad(85.2))

    V4_ag = 2157 * np.exp(1j * np.deg2rad(-34.2))
    V4_bg = 1936 * np.exp(1j * np.deg2rad(-157.0))
    V4_cg = 1849 * np.exp(1j * np.deg2rad(73.4))

    I12_a = 285.7 * np.exp(1j * np.deg2rad(-27.6))
    I12_b = 402.7 * np.exp(1j * np.deg2rad(-149.6))
    I12_c = 349.1 * np.exp(1j * np.deg2rad(74.4))

    I34_a = 695.5 * np.exp(1j * np.deg2rad(-66.0))
    I34_b = 1033 * np.exp(1j * np.deg2rad(177.1))
    I34_c = 1352 * np.exp(1j * np.deg2rad(55.2))

    s_a = V4_ag * np.conj(I34_a)
    s_b = V4_bg * np.conj(I34_b)
    s_c = V4_cg * np.conj(I34_c)

    feet2m = 0.3048

    data = {
        "lines": [{
            "bus_j": "1",
            "bus_k": "2",
            "code": "4wires3",
            "m": 2000.0 * feet2m
        }, {
            "bus_j": "3",
            "bus_k": "4",
            "code": "4wires",
            "m": 2500.0 * feet2m
        }],
        "buses": [
            {
                "bus": "1",
                "pos_x": 0,
                "pos_y": 0,
                "units": "m",
                "U_kV": 12.47
            },
            {
                "bus": "2",
                "pos_x": 2000.0 * feet2m,
                "pos_y": 0,
                "units": "m",
                "U_kV": 12.47
            },
            {
                "bus": "3",
                "pos_x": 2400.0 * feet2m,
                "pos_y": 0,
                "units": "m",
                "U_kV": 4.16
            },
            {
                "bus": "4",
                "pos_x": 4500.0 * feet2m,
                "pos_y": 0,
                "units": "m",
                "U_kV": 4.16
            },
        ],
        "grid_formers": [{
            "bus": "1",
            "bus_nodes": [1, 2, 3],
            "kV": [7.2, 7.2, 7.2],
            "deg": [0, -120.0, 120.0]
        }],
        "transformers": [
            {
                "bus_j": "2",
                "bus_k": "3",
                "S_n_kVA": 6000.0,
                "U_j_kV": 12.47,
                "U_k_kV": 4.16,
                "R_cc_pu": 0.01,
                "X_cc_pu": 0.06,
                "connection": "Dyn11",
                "conductors_j": 3,
                "conductors_k": 4
            },
        ],
        "loads": [{
            "bus": "4",
            "kW": [s_a.real / 1000, s_b.real / 1000, s_c.real / 1000],
            "kvar": [s_a.imag / 1000, s_b.imag / 1000, s_c.imag / 1000],
            "type": "3P+N"
        }],
        "shunts": [{
            "bus": "3",
            "R": 1.0e-8,
            "X": 0.0,
            "bus_nodes": [4, 0]
        }, {
            "bus": "4",
            "R": 1.0e-8,
            "X": 0.0,
            "bus_nodes": [4, 0]
        }],
        "line_codes": {
            "4wires": {
                'GMR': [
                    0.0244 * feet2m, 0.0244 * feet2m, 0.0244 * feet2m,
                    0.00814 * feet2m
                ],  # m
                'diam_c': [1.05 / 100] * 4,  # m
                'R_cond': [
                    0.306 / mile2m, 0.306 / mile2m, 0.306 / mile2m,
                    0.592 / mile2m
                ],  # Ohm/m
                'pos_x':
                [-4 * feet2m, -1.5 * feet2m, 3.0 * feet2m, 0.0 * feet2m],
                'pos_y': [28 * feet2m, 28 * feet2m, 28 * feet2m, 24 * feet2m],
                'freq':
                60.0
            },
            "3wires": {
                "R": [[0.45753751, 0.15593636, 0.15347119],
                      [0.15593636, 0.4666138, 0.15799251],
                      [0.15347119, 0.15799251, 0.46145871]],
                "X": [[1.07802078, 0.50165398, 0.38491254],
                      [0.50165398, 1.04815115, 0.42362819],
                      [0.38491254, 0.42362819, 1.06504486]],
                "unit":
                "miles"
            },
            "4wires3": {
                "R": [[0.4576, 0.1559, 0.1535], [0.1559, 0.4666, 0.1580],
                      [0.1535, 0.1580, 0.4615]],
                "X": [[1.4133, 0.8515, 0.7266], [0.8515, 1.4133, 0.7802],
                      [0.7266, 0.7802, 1.4133]],
                "unit":
                "miles"
            },
        }
    }
    grid_1 = grid()
    grid_1.read(data)  # Load data

    grid_1.pf()  # solve power flow

    error_v4_a = (abs(V4_ag) - abs(grid_1.res['4'].v_ag)) / abs(V4_ag) * 100
    error_v4_b = (abs(V4_bg) - abs(grid_1.res['4'].v_bg)) / abs(V4_bg) * 100
    error_v4_c = (abs(V4_cg) - abs(grid_1.res['4'].v_cg)) / abs(V4_cg) * 100

    assert abs(error_v4_a) < 0.05  # as stated by Dugan
    assert abs(error_v4_b) < 0.05  # as stated by Dugan
    assert abs(error_v4_c) < 0.05  # as stated by Dugan
コード例 #16
0
def test_monitor1():
    
    data = {
    "transformers":[
            {"bus_j": "Bus_MV",  "bus_k": "Bus_LV",  "S_n_kVA": 150.0, "U_1_kV":20.0, "U_2_kV":0.4,
            "R_cc_pu": 0.01, "X_cc_pu":0.04, "connection": "Dyn11", 
            "conductors_1": 3, "conductors_2": 4}
            ],
    "lines":[
            {"bus_j": "Bus_LV",  "bus_k": "Client_1",  "code": "UG1", "m": 100.0},
            {"bus_j": "Client_1",  "bus_k": "Bus_LV",  "code": "UG2", "m": 100.0},
            {"bus_j": "Client_1",  "bus_k": "C1_c1",  "code": "UG1", "m": 20.0},
            {"bus_j": "Client_1",  "bus_k": "C1_c2",  "code": "UG1", "m": 30.0},
            {"bus_j": "Client_2",  "bus_k": "Bus_LV",  "code": "UG1", "m": 200.0},
            {"bus_j": "Client_2",  "bus_k": "C2_c1",  "code": "UG1", "m": 10.0}
            ],
    "buses":[
            {"bus": "Bus_MV",  "pos_x": 0,  "pos_y": 0, "units": "m", "U_kV":20.0},
            {"bus": "Bus_LV",  "pos_x":10,  "pos_y": 0, "units": "m", "U_kV":0.4},
            {"bus": "Client_1",  "pos_x":100, "pos_y": 20, "units": "m", "U_kV":0.4},
            {"bus": "C1_c1",  "pos_x":120, "pos_y": 30, "units": "m", "U_kV":0.4},
            {"bus": "C1_c2",  "pos_x":130, "pos_y": 10, "units": "m", "U_kV":0.4},
            {"bus": "Client_2",  "pos_x":200, "pos_y": -30, "units": "m", "U_kV":0.4},
            {"bus": "C2_c1",  "pos_x":210, "pos_y": -30, "units": "m", "U_kV":0.4}
            ],
    "grid_formers":[
            {"bus": "Bus_MV",
            "bus_nodes": [1, 2, 3], "deg": [0, -120, -240], 
            "kV": [11.547, 11.547, 11.547]}
            ],
    "grid_feeders":[{"bus": "C1_c1","bus_nodes": [1, 2, 3, 4],
                    "kW": [0, 0, 0], "kvar": [0,0,0],
                    "kA": [0,0,0], "phi_deg":[0, 0, 0]}
                    ],
    "loads":[
             {"bus": "C1_c2" , "kVA":   20.0, "pf": 0.8,"type":"3P"},
            # {"bus": "C1_c2" , "kVA":   20.0, "pf": 0.8,"type":"1P+N","bus_nodes": [1,4]},    
             {"bus": "C2_c1" , "kVA":   30.0, "pf": 0.8,"type":"3P"},
            ],
    "shunts":[
            {"bus": "Bus_LV" , "R": 0.0001, "X": 0.0, "bus_nodes": [4,0]},
            {"bus": "Bus_LV" , "R": 0.0001, "X": 0.0, "bus_nodes": [4,0]}
            ]
    }   
    
    sys1 = grid()
    sys1.read(data)  # Load data
    sys1.pf_solver = 1
    sys1.pf()  # solve power flow

    sys1.get_v()      # post process voltages
    sys1.get_i()      # post process currents
    mon1 = sys1.monitor('Client_1','Bus_LV')
    mon2 = sys1.monitor('Client_2','Bus_LV')

    
    results = {'P1': (-0.8*20*1000, mon1.P),#'Q1': (-0.6*20*100, mon1.Q),
               #'P2': (-0.8*30*1000, mon2.P),'Q2': (-0.6*30*100, mon2.Q)
               }
    for item in results:
        expected, obtained = results[item]
        error = expected - obtained

        assert abs(error)<100.0