forked from FraSanvit/reserve-margins
-
Notifications
You must be signed in to change notification settings - Fork 0
/
run-model.py
69 lines (44 loc) · 1.85 KB
/
run-model.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Jul 11 15:06:29 2022
@author: fs
"""
import calliope
import create_input
import run
from dual_utils import duals_to_pickle, load_duals, process_system_balance_duals
import os
import ntpath
# SETTINGS
time_resolution ='1' # hours
model_year = '2018'
mode = "scenario1"
# SCENARIO DEFINITION
projection_year = '2050'
base_scenario = "reserve_margins, res_{time_resolution}h"
scenarios_string = ''
# MODEL RUN & SAVING RESULTS
path_to_model_yaml = f'model/model-{model_year}.yaml'
path_to_netcdf_of_model_inputs = f'model/{mode}-{time_resolution}h_inputs.nc'
path_to_netcdf_of_results=f'results/{mode}-{time_resolution}h.nc'
model_input = create_input.build_model(path_to_model_yaml, scenarios_string, path_to_netcdf_of_model_inputs)
model_run, duals, backend_model = run.run_model(path_to_netcdf_of_model_inputs, path_to_netcdf_of_results)
# DUALS POSTPROCESSING
system_balance_duals = duals['system_balance_constraint Constraint']
balance_duals = process_system_balance_duals(system_balance_duals)
balance_duals.set_index('timestep',inplace=True)
balance_duals.to_csv(f'duals/duals_{projection_year}-{mode}-{time_resolution}h.csv')
# MODEL OUTPUT
model_data = model_run._model_data
model_run.to_csv(f"results/{mode}")
caps = model_run.get_formatted_array('energy_cap').to_pandas().T
caps[caps.index.isin(["ccgt","open_field_pv","wind_offshore","wind_onshore_monopoly"])].sum(axis=1).sum()
cap_gen = caps[caps.index.isin(["ccgt","open_field_pv","wind_offshore","wind_onshore_monopoly"])].sum().sum()
# MODEL INPUT
model_input = calliope.read_netcdf(path_to_netcdf_of_model_inputs)
# LP FILE
backend_model.to_lp(f"lp-files/model-{mode}.lp")
# backend_model._model_data["cap_value"].to_pandas()
# backend_model._model_data.coords
# backend_model._model_data.coords["loc_tech_cap_value_constraint"].values