Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name,base_power_MVA,base_voltage_kV,base_frequency_Hz,minimum_voltage_pu,maximum_voltage_pu
lima,1.00E+02,2.30E+02,60,0.95,1.05
santiago,1.00E+02,2.30E+02,60,0.95,1.05
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name,bus,minimum_active_power_MW,maximum_active_power_MW,minimum_reactive_power_MVAR,maximum_reactive_power_MVAR,base_power_MVA,base_voltage_kV,base_frequency_Hz,cost_variable_USDperMWh,rf1_pu,lf1_pu,rsh_pu,csh_pu,txr_power_MVA,txr_voltage1_kV,txr_voltage2_kV,txr_r1_pu,txr_l1_pu,txr_r2_pu,txr_l2_pu,beta,kp_pll_pu,ki_pll_puHz,kp_cc_pu,ki_cc_puHz,v_dc_ref,c_dc,kp_oc_pu,ki_oc_puHz,Tload,r_dc
solar,santiago,50,50,-10,10,1.00E+02,4.80E-01,60,0,0.02,0.1,10,1,1.00E+02,4.80E-01,2.30E+02,0.01,0.1,0.02,0.1,0,1,5,1,5,1,20,0.01,0,0.01,10
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name,bus,minimum_active_power_MW,maximum_active_power_MW,minimum_reactive_power_MVAR,maximum_reactive_power_MVAR,base_power_MVA,base_voltage_kV,base_frequency_Hz,cost_variable_USDperMWh,r_pu,x_pu
gen1,lima,-200,200,-500,500,1.00E+02,2.30E+02,60,0,0.01,0.04
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name,from_bus,to_bus,base_power_MVA,base_voltage_kV,base_frequency_Hz,r_pu,x_pu,g_pu,b_pu
tx_1,lima,santiago,1.00E+02,2.30E+02,60,0.01,0.2,0.05,0.066666667
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
bus,timepoint,load_MW,load_MVAR
lima,t_1,0,0
chile,t_1,0,0
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name
timepoint_1
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
bus,timepoint,generator_dispatch_MW,load_shedding_MW,load_MW,net_line_leaving_flow_MW
lima,timepoint_1,-39.80828383129473,-9.974940963696508e-9,0.0,-39.808283840763764
santiago,timepoint_1,50.0,-9.97494096379835e-9,0.0,49.999999989909305
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
id,bus,timepoint,voltage_magnitude_pu,voltage_angle_deg
0,lima,timepoint_1,0.9943823157326167,0.0
1,santiago,timepoint_1,1.0045025151823652,5.136441290604731
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
component,cost
total_cost_USD,-0.00003989976385267742
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
id,type,generator,timepoint,active_power_MW,reactive_power_MVAR
0,infinite_sources,gen1,timepoint_1,-39.80828383129473,-7.380487609970588
0,gfli_e,solar,timepoint_1,50.0,-1.8861486979909645
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
line,from_bus,to_bus,existing_capacity_MW,active_power_from_bus_MW,reactive_power_from_bus_MVAR,active_power_to_bus_MW,reactive_power_to_bus_MVAR,active_power_loss_MW,reactive_power_loss_MVAR
tx_1,lima,santiago,inf,-39.80828384076382,-7.380487617787122,49.9999999899092,-1.8861487031750395,10.191716149145378,-9.266636320962162
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
bus,timepoint,active_load_shedding_MW,reactive_load_shedding_MVAR
lima,timepoint_1,-9.974940963696508e-9,-9.974940964376057e-9
santiago,timepoint_1,-9.97494096379835e-9,-9.974940960806504e-9
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
bus,timepoint,generator_dispatch_MVAR,load_shedding_MVAR,load_MVAR,net_line_leaving_flow_MVAR
lima,timepoint_1,-7.380487609970588,-9.974940964376057e-9,0.0,-7.380487617787122
santiago,timepoint_1,-1.8861486979909645,-9.974940960806504e-9,0.0,-1.8861487031749502
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
attribute,value
solver_name,ipopt
solver_status,ok
termination_condition,optimal
time_spent_seconds,0.06075906753540039
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Index,"('infinite_sources_0', 'i_bus_D')","('infinite_sources_0', 'i_bus_Q')","('gfli_e_0', 'i_bus_D')","('gfli_e_0', 'i_bus_Q')","('shunt_parallel_rc_0', 'v_bus_D')","('shunt_parallel_rc_0', 'v_bus_Q')","('shunt_parallel_rc_1', 'v_bus_D')","('shunt_parallel_rc_1', 'v_bus_Q')","('branch_series_rl_0', 'i_br_D')","('branch_series_rl_0', 'i_br_Q')"
"('infinite_sources_0', 'v_ref_d')",0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
"('infinite_sources_0', 'v_ref_q')",0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
"('infinite_sources_0', 'v_bus_D')",0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0
"('infinite_sources_0', 'v_bus_Q')",0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0
"('gfli_e_0', 'v_dc_ref')",0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
"('gfli_e_0', 'i_load_ref')",0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
"('gfli_e_0', 'i_bus_q_ref')",0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
"('gfli_e_0', 'v_bus_D')",0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0
"('gfli_e_0', 'v_bus_Q')",0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0
"('shunt_parallel_rc_0', 'i_bus_D')",1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1.0,0.0
"('shunt_parallel_rc_0', 'i_bus_Q')",0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1.0
"('shunt_parallel_rc_1', 'i_bus_D')",0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0
"('shunt_parallel_rc_1', 'i_bus_Q')",0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0
"('branch_series_rl_0', 'v_from_bus_D')",0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0
"('branch_series_rl_0', 'v_from_bus_Q')",0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0
"('branch_series_rl_0', 'v_to_bus_D')",0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0
"('branch_series_rl_0', 'v_to_bus_Q')",0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Index,"('infinite_sources_0', 'v_ref_d')","('infinite_sources_0', 'v_ref_q')","('gfli_e_0', 'v_dc_ref')","('gfli_e_0', 'i_load_ref')","('gfli_e_0', 'i_bus_q_ref')"
"('infinite_sources_0', 'v_ref_d')",1.0,0.0,0.0,0.0,0.0
"('infinite_sources_0', 'v_ref_q')",0.0,1.0,0.0,0.0,0.0
"('infinite_sources_0', 'v_bus_D')",0.0,0.0,0.0,0.0,0.0
"('infinite_sources_0', 'v_bus_Q')",0.0,0.0,0.0,0.0,0.0
"('gfli_e_0', 'v_dc_ref')",0.0,0.0,1.0,0.0,0.0
"('gfli_e_0', 'i_load_ref')",0.0,0.0,0.0,1.0,0.0
"('gfli_e_0', 'i_bus_q_ref')",0.0,0.0,0.0,0.0,1.0
"('gfli_e_0', 'v_bus_D')",0.0,0.0,0.0,0.0,0.0
"('gfli_e_0', 'v_bus_Q')",0.0,0.0,0.0,0.0,0.0
"('shunt_parallel_rc_0', 'i_bus_D')",0.0,0.0,0.0,0.0,0.0
"('shunt_parallel_rc_0', 'i_bus_Q')",0.0,0.0,0.0,0.0,0.0
"('shunt_parallel_rc_1', 'i_bus_D')",0.0,0.0,0.0,0.0,0.0
"('shunt_parallel_rc_1', 'i_bus_Q')",0.0,0.0,0.0,0.0,0.0
"('branch_series_rl_0', 'v_from_bus_D')",0.0,0.0,0.0,0.0,0.0
"('branch_series_rl_0', 'v_from_bus_Q')",0.0,0.0,0.0,0.0,0.0
"('branch_series_rl_0', 'v_to_bus_D')",0.0,0.0,0.0,0.0,0.0
"('branch_series_rl_0', 'v_to_bus_Q')",0.0,0.0,0.0,0.0,0.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Index,"('infinite_sources_0', 'i_bus_D')","('infinite_sources_0', 'i_bus_Q')","('gfli_e_0', 'i_bus_D')","('gfli_e_0', 'i_bus_Q')","('shunt_parallel_rc_0', 'v_bus_D')","('shunt_parallel_rc_0', 'v_bus_Q')","('shunt_parallel_rc_1', 'v_bus_D')","('shunt_parallel_rc_1', 'v_bus_Q')","('branch_series_rl_0', 'i_br_D')","('branch_series_rl_0', 'i_br_Q')"
"('infinite_sources_0', 'i_bus_D')",1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
"('infinite_sources_0', 'i_bus_Q')",0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
"('gfli_e_0', 'i_bus_D')",0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
"('gfli_e_0', 'i_bus_Q')",0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0
"('shunt_parallel_rc_0', 'v_bus_D')",0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0
"('shunt_parallel_rc_0', 'v_bus_Q')",0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0
"('shunt_parallel_rc_1', 'v_bus_D')",0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0
"('shunt_parallel_rc_1', 'v_bus_Q')",0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0
"('branch_series_rl_0', 'i_br_D')",0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0
"('branch_series_rl_0', 'i_br_Q')",0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Index,"('infinite_sources_0', 'v_ref_d')","('infinite_sources_0', 'v_ref_q')","('gfli_e_0', 'v_dc_ref')","('gfli_e_0', 'i_load_ref')","('gfli_e_0', 'i_bus_q_ref')"
"('infinite_sources_0', 'i_bus_D')",0.0,0.0,0.0,0.0,0.0
"('infinite_sources_0', 'i_bus_Q')",0.0,0.0,0.0,0.0,0.0
"('gfli_e_0', 'i_bus_D')",0.0,0.0,0.0,0.0,0.0
"('gfli_e_0', 'i_bus_Q')",0.0,0.0,0.0,0.0,0.0
"('shunt_parallel_rc_0', 'v_bus_D')",0.0,0.0,0.0,0.0,0.0
"('shunt_parallel_rc_0', 'v_bus_Q')",0.0,0.0,0.0,0.0,0.0
"('shunt_parallel_rc_1', 'v_bus_D')",0.0,0.0,0.0,0.0,0.0
"('shunt_parallel_rc_1', 'v_bus_Q')",0.0,0.0,0.0,0.0,0.0
"('branch_series_rl_0', 'i_br_D')",0.0,0.0,0.0,0.0,0.0
"('branch_series_rl_0', 'i_br_Q')",0.0,0.0,0.0,0.0,0.0
62 changes: 62 additions & 0 deletions examples/small_signal_and_emt/2-bus-src-gfli_e/run.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@

# Import Python standard and third-party packages
from pathlib import Path
from scipy.linalg import eig, inv
import matplotlib.pyplot as plt
import sys
import seaborn as sns
import pandas as pd
import numpy as np
import os
from plotly.subplots import make_subplots
import plotly.graph_objects as go

sys.path.append("/Users/ruthkravis/Documents/STING")
# Import sting package
from sting import main
from sting.system.core import System
from scipy import signal



# Step-change input to applied to the system
def step1(t):
return 0.2 if t >= 0.2 else 0.0

def step2(t):
return 0.0

def step3(t):
return 0.1 if t >= 1.0 else 0.0


def sin_oscillation(t):
return 0.05*np.sin(2*np.pi*20*t) if t < 1 else 0 #1 Hz oscillation

def square_oscillation(t):
osc = 0.05*signal.square(2 * np.pi * 14 * t)
return osc

inputs = {
'infinite_sources_0': {
'v_ref_d': step1
},
'gfli_e_0': {
'i_load_ref': step2
}
}

t_max = 1.0 # Simulation length (in seconds)

# Specify path of the case study directory
case_dir = Path(__file__).resolve().parent

# Construct system and small-signal model
sys = System.from_csv(case_directory=case_dir)

# Construct system and small-signal model
_, ssm = main.run_ssm(case_directory=case_dir)
ssm.simulate_ssm(t_max=t_max, inputs=inputs)
main.run_emt(case_directory=case_dir, inputs=inputs, t_max=t_max)

print('\nok')
202 changes: 202 additions & 0 deletions examples/small_signal_and_emt/2-bus-src-gfmi_e/emt_analysis.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
"""

Analysis of EMT response of GFMI_E v INF bus system to a grid disturbance under different P/Q and different Pref/Pload relationships

In progress - April 3 (Ruth)

"""

# Import Python standard and third-party packages
from pathlib import Path
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# Import sting package
from sting.system.core import System
from sting.system.operations import SystemModifier
from sting.modules.power_flow.core import ACPowerFlow
from sting.modules.simulation_emt.core import SimulationEMT
from sting.modules.small_signal_modeling.core import SmallSignalModel

# Specify path of the case study directory
case_dir = Path(__file__).resolve().parent

# Construct system and small-signal model
def step1(t):
return 0.3 if t >= 0.5 else 0.0

def step2(t):
return 0.0

def step3(t):
return 0.1 if t > 1.0 else 0.0

inputs = {'infinite_sources_0': {'v_ref_d': step1},
'gfmi_e_0': {'p_ref': step2,
'q_ref': step2,
'v_ref': step2,
'v_dc_ref': step2,
'v_s': step2,
'i_load_ref': step2}}

t_max = 2.0

# Load system from CSV files
sys = System.from_csv(case_directory=case_dir)

n = 3
Prange = np.linspace(100,0,n)
Qrange = np.linspace(-50,50,n)

Sbase = 100 # MVA
vdc_ref = 1.05 # pu

tps = np.linspace(0, t_max, 500)
dt = tps[1] - tps[0]

def run_sim(sys, P, Q, Sbase, vdc_ref, factor):
sys.gfmi_e[0].minimum_active_power_MW = -P*factor
sys.gfmi_e[0].maximum_active_power_MW = -P*factor
sys.gfmi_e[0].minimum_reactive_power_MVAR = Q
sys.gfmi_e[0].maximum_reactive_power_MVAR = Q
sys.gfmi_e[0].i_load_ref = P/Sbase/vdc_ref

# Run power flow
pf = ACPowerFlow(system=sys, model_settings=None, solver_settings=None)
pf.solve()

# Break down lines into branches and shunts for small-signal modeling
sys_modifier = SystemModifier(system=sys)
sys_modifier.decompose_lines()
sys_modifier.combine_shunts()

# Construct small-signal model
ssm = SmallSignalModel(system=sys)
ssm.construct_system_ssm()

emt_sc = SimulationEMT(system=sys)
emt_sc.sim(t_max, inputs)
return emt_sc


# Case 1: Pref = Pload
results_rocof = np.zeros([Prange.shape[0],Qrange.shape[0]])
results_nadir = np.zeros([Prange.shape[0],Qrange.shape[0]])

i = 0
for P in Prange:
j = 0
for Q in Qrange:
emt_sc = run_sim(sys, P, Q, Sbase, vdc_ref, 1.0)

# Measure some performance metrics - frequency ROCOF and nadir and steady state error ?
gfm = emt_sc.system.gfmi_e[0].variables_emt.x.value
w_pc = gfm[1,:]
# nadir
nadir = np.min(w_pc)
results_nadir[i,j] = nadir
# rocof - calculate as a moving average of duration 100ms (~25 timesteps for us)
df_dt = np.abs(np.diff(w_pc)/dt) # calculate raw rocof
df_dt_ma = np.convolve(df_dt,np.ones(25)/25) # get moving averages over 25 time steps (~100ms)
rocof = np.max(df_dt_ma)

results_rocof[i,j] = rocof
j += 1
i += 1

# Plot results
fig, axes = plt.subplots(nrows=2,ncols=3, figsize=(30,15))

sns.heatmap(results_nadir, xticklabels=Qrange, yticklabels=Prange, linewidth=0.5, ax=axes[0,1], cbar=True, cbar_kws = {'label': 'nadir'})
axes[0,1].set_xlabel("Q_sh")
axes[0,1].set_ylabel("P_load")
axes[0,1].set_title("Pref = Pload")

sns.heatmap(results_rocof, xticklabels=Qrange, yticklabels=Prange, linewidth=0.5, ax=axes[1,1], cbar=True, cbar_kws = {'label': 'rocof'})
axes[1,1].set_xlabel("Q_sh")
axes[1,1].set_ylabel("P_load")
axes[1,1].set_title("Pref = Pload")


# Case 2: Pref < Pload (Pref=0.8*Pload)

results_rocof = np.zeros([Prange.shape[0],Qrange.shape[0]])
results_nadir = np.zeros([Prange.shape[0],Qrange.shape[0]])

i = 0
for P in Prange:
j = 0
for Q in Qrange:
emt_sc = run_sim(sys, P, Q, Sbase, vdc_ref, 0.8)

# Measure some performance metrics - frequency ROCOF and nadir and steady state error ?
gfm = emt_sc.system.gfmi_e[0].variables_emt.x.value
w_pc = gfm[1,:]
# nadir
nadir = np.min(w_pc)
results_nadir[i,j] = nadir
# rocof - calculate as a moving average of duration 100ms (~25 timesteps for us)
df_dt = np.abs(np.diff(w_pc)/dt) # calculate raw rocof
df_dt_ma = np.convolve(df_dt,np.ones(25)/25) # get moving averages over 25 time steps (~100ms)
rocof = np.max(df_dt_ma)

results_rocof[i,j] = rocof
j += 1
i += 1

# Plot results

sns.heatmap(results_nadir, xticklabels=Qrange, yticklabels=Prange, linewidth=0.5, ax=axes[0,0], cbar=True, cbar_kws = {'label': 'nadir'})
axes[0,0].set_xlabel("Q_sh")
axes[0,0].set_ylabel("P_load")
axes[0,0].set_title("Pref = 0.8*Pload")

sns.heatmap(results_rocof, xticklabels=Qrange, yticklabels=Prange, linewidth=0.5, ax=axes[1,0], cbar=True, cbar_kws = {'label': 'rocof'})
axes[1,0].set_xlabel("Q_sh")
axes[1,0].set_ylabel("P_load")
axes[1,0].set_title("Pref = 0.8*Pload")


# Case 3: Pref > Pload (Pref=1.2*Pload)

results_rocof = np.zeros([Prange.shape[0],Qrange.shape[0]])
results_nadir = np.zeros([Prange.shape[0],Qrange.shape[0]])

i = 0
for P in Prange:
j = 0
for Q in Qrange:
emt_sc = run_sim(sys, P, Q, Sbase, vdc_ref, 1.2)

# Measure some performance metrics - frequency ROCOF and nadir and steady state error ?
gfm = emt_sc.system.gfmi_e[0].variables_emt.x.value
w_pc = gfm[1,:]
# nadir
nadir = np.min(w_pc)
results_nadir[i,j] = nadir
# rocof - calculate as a moving average of duration 100ms (~25 timesteps for us)
df_dt = np.abs(np.diff(w_pc)/dt) # calculate raw rocof
df_dt_ma = np.convolve(df_dt,np.ones(25)/25) # get moving averages over 25 time steps (~100ms)
rocof = np.max(df_dt_ma)

results_rocof[i,j] = rocof
j += 1
i += 1

# Plot results

sns.heatmap(results_nadir, xticklabels=Qrange, yticklabels=Prange, linewidth=0.5, ax=axes[0,2], cbar=True, cbar_kws = {'label': 'nadir'})
axes[0,2].set_xlabel("Q_sh")
axes[0,2].set_ylabel("P_load")
axes[0,2].set_title("Pref = 1.2*Pload")

sns.heatmap(results_rocof, xticklabels=Qrange, yticklabels=Prange, linewidth=0.5, ax=axes[1,2], cbar=True, cbar_kws = {'label': 'rocof'})
axes[1,2].set_xlabel("Q_sh")
axes[1,2].set_ylabel("P_load")
axes[1,2].set_title("Pref = 1.2*Pload")

plt.show()
plt.savefig(str(case_dir)+"/emt_heatmaps.png")

print('ok')
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
name,bus,minimum_active_power_MW,maximum_active_power_MW,minimum_reactive_power_MVAR,maximum_reactive_power_MVAR,base_power_MVA,base_voltage_kV,base_frequency_Hz,cost_variable_USDperMWh,rf1_pu,xf1_pu,rsh_pu,csh_pu,txr_power_MVA,txr_voltage1_kV,txr_voltage2_kV,txr_r1_pu,txr_x1_pu,txr_r2_pu,txr_x2_pu,h_s,kd_pu,droop_q_pu,tau_pc_s,kp_vc_pu,ki_vc_puHz,kp_v_dc,ki_v_dc,kp_i_L,ki_i_L,l_dc,c_dc,v_dc_ref,v_s,Ti_L,Tv_dc,Ti_dc,Kff_idc,Kff_iload,Ti_load,Tload,i_load_ref
solar,santiago,-10,-10,0,0,1.00E+02,4.80E-01,60,0,0.01,0.1,10000,0.1,1.00E+02,4.80E-01,2.30E+02,0.01,0.1,0.02,0.1,0.5,70,0.01,0.001,1,10,1.2,20,1,10,1,20,1.0,0.5,0.01,0.01,0.01,1,1,0.01,0.001,0.1
name,bus,minimum_active_power_MW,maximum_active_power_MW,minimum_reactive_power_MVAR,maximum_reactive_power_MVAR,base_power_MVA,base_voltage_kV,base_frequency_Hz,cost_variable_USDperMWh,rf1_pu,xf1_pu,rsh_pu,csh_pu,txr_power_MVA,txr_voltage1_kV,txr_voltage2_kV,txr_r1_pu,txr_x1_pu,txr_r2_pu,txr_x2_pu,h_s,kd_pu,droop_q_pu,tau_pc_s,kp_vc_pu,ki_vc_puHz,kp_v_dc,ki_v_dc,kp_i_L,ki_i_L,l_dc,c_dc,v_dc_ref,v_s,Ti_L,Tv_dc,Ti_dc,Kff_idc,Kff_iload,Ti_load,Tload,i_load_ref,Pbat_max_pu,SOC_max_pu,SOC_init_pu
solar,santiago,-50,-50,-10,10,1.00E+02,4.80E-01,60,0,0.02,0.1,10,1,1.00E+02,4.80E-01,2.30E+02,0.01,0.1,0.02,0.1,0.5,70,0.01,0.001,1,10,1.2,20,1,10,0.1,20,1.05,0.5,0.01,0.01,0.01,1,1,0.01,0.001,0.5,1.5,0.25,0.125
Loading