base_network: Remove clean-up code that moved directly into gridkit
This commit is contained in:
parent
6e1566ac32
commit
2c7f013e39
@ -19,11 +19,6 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
import pypsa
|
||||
|
||||
def _find_closest_bus(buses, pos):
|
||||
if (not hasattr(_find_closest_bus, 'kdtree')) or len(_find_closest_bus.kdtree.data) != len(buses.index):
|
||||
_find_closest_bus.kdtree = sp.spatial.cKDTree(buses.loc[:,["x", "y"]].values)
|
||||
return buses.index[_find_closest_bus.kdtree.query(pos)[1]]
|
||||
|
||||
def _load_buses_from_eg():
|
||||
buses = (pd.read_csv(snakemake.input.eg_buses, quotechar="'",
|
||||
true_values='t', false_values='f',
|
||||
@ -95,46 +90,6 @@ def _load_lines_from_eg(buses):
|
||||
|
||||
return lines
|
||||
|
||||
def _split_aclines_with_several_voltages(buses, lines, transformers):
|
||||
## Split AC lines with multiple voltages
|
||||
def namer(string, start=0): return (string.format(x) for x in count(start=start))
|
||||
busname = namer("M{:02}")
|
||||
trafoname = namer("M{:02}")
|
||||
linename = namer("M{:02}")
|
||||
|
||||
def find_or_add_lower_v_nom_bus(bus, v_nom):
|
||||
candidates = transformers.loc[(transformers.bus1 == bus) &
|
||||
(transformers.bus0.map(buses.v_nom) == v_nom),
|
||||
'bus0']
|
||||
if len(candidates):
|
||||
return candidates.iloc[0]
|
||||
new_bus = next(busname)
|
||||
buses.loc[new_bus] = pd.Series({'v_nom': v_nom, 'symbol': 'joint', 'carrier': 'AC',
|
||||
'x': buses.at[bus, 'x'], 'y': buses.at[bus, 'y'],
|
||||
'under_construction': buses.at[bus, 'under_construction']})
|
||||
|
||||
transformers.loc[next(trafoname)] = pd.Series({'bus0': new_bus, 'bus1': bus})
|
||||
return new_bus
|
||||
|
||||
voltage_levels = lines.v_nom.unique()
|
||||
|
||||
for line in lines.tags.str.extract(r'"text_"=>"\(?(\d+)\+(\d+).*?"', expand=True).dropna().itertuples():
|
||||
v_nom = int(line._2)
|
||||
if lines.at[line.Index, 'num_parallel'] > 1:
|
||||
lines.at[line.Index, 'num_parallel'] -= 1
|
||||
|
||||
if v_nom in voltage_levels:
|
||||
bus0 = find_or_add_lower_v_nom_bus(lines.at[line.Index, 'bus0'], v_nom)
|
||||
bus1 = find_or_add_lower_v_nom_bus(lines.at[line.Index, 'bus1'], v_nom)
|
||||
lines.loc[next(linename)] = pd.Series(
|
||||
dict(chain(iteritems({'bus0': bus0, 'bus1': bus1, 'v_nom': v_nom, 'circuits': 1}),
|
||||
iteritems({k: lines.at[line.Index, k]
|
||||
for k in ('underground', 'under_construction',
|
||||
'tags', 'geometry', 'length')})))
|
||||
)
|
||||
|
||||
return buses, lines, transformers
|
||||
|
||||
def _apply_parameter_corrections(n):
|
||||
with open(snakemake.input.parameter_corrections) as f:
|
||||
corrections = yaml.load(f)
|
||||
@ -205,49 +160,6 @@ def _set_electrical_parameters_transformers(transformers):
|
||||
def _remove_dangling_branches(branches, buses):
|
||||
return pd.DataFrame(branches.loc[branches.bus0.isin(buses.index) & branches.bus1.isin(buses.index)])
|
||||
|
||||
def _connect_close_buses(network, radius=1.):
|
||||
adj = network.graph(["Line", "Transformer", "Link"]).adj
|
||||
|
||||
n_lines_added = 0
|
||||
n_transformers_added = 0
|
||||
ac_buses = network.buses[network.buses.carrier == 'AC']
|
||||
|
||||
for i,u in enumerate(ac_buses.index):
|
||||
|
||||
vs = ac_buses[["x","y"]].iloc[i+1:]
|
||||
distance_km = pypsa.geo.haversine(vs, ac_buses.loc[u,["x","y"]])
|
||||
|
||||
for j,v in enumerate(vs.index):
|
||||
km = distance_km[j,0]
|
||||
|
||||
if km < radius:
|
||||
if u in adj[v]:
|
||||
continue
|
||||
#print(u,v,ac_buses.at[u,"v_nom"], ac_buses.at[v,"v_nom"],km)
|
||||
|
||||
if ac_buses.at[u,"v_nom"] != ac_buses.at[v,"v_nom"]:
|
||||
network.add("Transformer","extra_trafo_{}_{}".format(u,v),s_nom=2000,bus0=u,bus1=v,x=0.1)
|
||||
n_transformers_added += 1
|
||||
else:
|
||||
network.add("Line","extra_line_{}_{}".format(u,v),s_nom=4000,bus0=u,bus1=v,x=0.1)
|
||||
n_lines_added += 1
|
||||
|
||||
logger.info("Added {} lines and {} transformers to connect buses less than {} km apart."
|
||||
.format(n_lines_added, n_transformers_added, radius))
|
||||
|
||||
return network
|
||||
|
||||
def _remove_connected_components_smaller_than(network, min_size):
|
||||
network.determine_network_topology()
|
||||
|
||||
sub_network_sizes = network.buses.groupby('sub_network').size()
|
||||
subs_to_remove = sub_network_sizes.index[sub_network_sizes < min_size]
|
||||
|
||||
logger.info("Removing {} small sub_networks (synchronous zones) with less than {} buses. In total {} buses."
|
||||
.format(len(subs_to_remove), min_size, network.buses.sub_network.isin(subs_to_remove).sum()))
|
||||
|
||||
return network[~network.buses.sub_network.isin(subs_to_remove)]
|
||||
|
||||
def _remove_unconnected_components(network):
|
||||
_, labels = csgraph.connected_components(network.adjacency_matrix(), directed=False)
|
||||
component = pd.Series(labels, index=network.buses.index)
|
||||
@ -289,18 +201,10 @@ def base_network():
|
||||
if 'T' in snakemake.wildcards.opts.split('-'):
|
||||
raise NotImplemented
|
||||
|
||||
# n = _connect_close_buses(n, radius=1.)
|
||||
|
||||
n = _remove_unconnected_components(n)
|
||||
|
||||
_apply_parameter_corrections(n)
|
||||
|
||||
# Workaround: import_components_from_dataframe does not preserve types of foreign columns
|
||||
n.lines['underground'] = n.lines['underground'].astype(bool)
|
||||
n.lines['under_construction'] = n.lines['under_construction'].astype(bool)
|
||||
n.links['underground'] = n.links['underground'].astype(bool)
|
||||
n.links['under_construction'] = n.links['under_construction'].astype(bool)
|
||||
|
||||
return n
|
||||
|
||||
if __name__ == "__main__":
|
||||
@ -322,9 +226,9 @@ if __name__ == "__main__":
|
||||
snakemake.wildcards = Dict(opts='LC')
|
||||
with open('../config.yaml') as f:
|
||||
snakemake.config = yaml.load(f)
|
||||
snakemake.output = ['../networks/base_LC.h5']
|
||||
snakemake.output = ['../networks/base_LC.nc']
|
||||
|
||||
logger.setLevel(level=snakemake.config['logging_level'])
|
||||
|
||||
n = base_network()
|
||||
n.export_to_hdf5(snakemake.output[0])
|
||||
n.export_to_netcdf(snakemake.output[0])
|
||||
|
Loading…
Reference in New Issue
Block a user