openTEPES 4.18.4__py3-none-any.whl → 4.18.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openTEPES/9n_PTDF/oT_Data_Demand_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_Duration_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_Emission_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_EnergyInflows_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_EnergyOutflows_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_Generation_9n_PTDF.csv +17 -0
- openTEPES/9n_PTDF/oT_Data_Inertia_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_Network_9n_PTDF.csv +14 -0
- openTEPES/9n_PTDF/oT_Data_NodeLocation_9n_PTDF.csv +10 -0
- openTEPES/9n_PTDF/oT_Data_OperatingReserveDown_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_OperatingReserveUp_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_Option_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_Parameter_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_Period_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_RESEnergy_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_ReserveMargin_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_Scenario_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_Stage_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_VariableEmissionCost_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableFuelCost_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMaxConsumption_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMaxEnergy_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMaxGeneration_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMaxStorage_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMinConsumption_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMinEnergy_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMinGeneration_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMinStorage_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariablePTDF_9n_PTDF.csv +8740 -0
- openTEPES/9n_PTDF/oT_Data_VariableTTCBck_9n_PTDF.csv +8739 -0
- openTEPES/9n_PTDF/oT_Data_VariableTTCFrw_9n_PTDF.csv +8739 -0
- openTEPES/9n_PTDF/oT_Dict_AreaToRegion_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Dict_Area_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Dict_Circuit_9n_PTDF.csv +3 -0
- openTEPES/9n_PTDF/oT_Dict_Generation_9n_PTDF.csv +17 -0
- openTEPES/9n_PTDF/oT_Dict_Line_9n_PTDF.csv +3 -0
- openTEPES/9n_PTDF/oT_Dict_LoadLevel_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Dict_NodeToZone_9n_PTDF.csv +10 -0
- openTEPES/9n_PTDF/oT_Dict_Node_9n_PTDF.csv +10 -0
- openTEPES/9n_PTDF/oT_Dict_Period_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Dict_Region_9n_PTDF.csv +31 -0
- openTEPES/9n_PTDF/oT_Dict_Scenario_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Dict_Stage_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Dict_Storage_9n_PTDF.csv +3 -0
- openTEPES/9n_PTDF/oT_Dict_Technology_9n_PTDF.csv +7 -0
- openTEPES/9n_PTDF/oT_Dict_ZoneToArea_9n_PTDF.csv +10 -0
- openTEPES/9n_PTDF/oT_Dict_Zone_9n_PTDF.csv +10 -0
- openTEPES/RTS-GMLC_6y/oT_Dict_AreaToRegion_RTS-GMLC_6y.csv +4 -4
- openTEPES/RTS-GMLC_6y/oT_Dict_Area_RTS-GMLC_6y.csv +4 -4
- openTEPES/RTS-GMLC_6y/oT_Dict_Circuit_RTS-GMLC_6y.csv +5 -5
- openTEPES/RTS-GMLC_6y/oT_Dict_Line_RTS-GMLC_6y.csv +3 -3
- openTEPES/RTS-GMLC_6y/oT_Dict_NodeToZone_RTS-GMLC_6y.csv +74 -74
- openTEPES/RTS-GMLC_6y/oT_Dict_Region_RTS-GMLC_6y.csv +2 -2
- openTEPES/RTS-GMLC_6y/oT_Dict_Scenario_RTS-GMLC_6y.csv +2 -2
- openTEPES/RTS-GMLC_6y/oT_Dict_Storage_RTS-GMLC_6y.csv +3 -3
- openTEPES/RTS-GMLC_6y/oT_Dict_Technology_RTS-GMLC_6y.csv +10 -10
- openTEPES/RTS-GMLC_6y/oT_Dict_ZoneToArea_RTS-GMLC_6y.csv +22 -22
- openTEPES/RTS-GMLC_6y/oT_Dict_Zone_RTS-GMLC_6y.csv +22 -22
- openTEPES/__init__.py +1 -1
- openTEPES/openTEPES.py +21 -15
- openTEPES/openTEPES_InputData.py +383 -214
- openTEPES/openTEPES_Main.py +2 -2
- openTEPES/openTEPES_ModelFormulation.py +413 -156
- openTEPES/openTEPES_OutputResults.py +228 -166
- openTEPES/openTEPES_ProblemSolving.py +30 -28
- {opentepes-4.18.4.dist-info → openTEPES-4.18.5.dist-info}/METADATA +15 -16
- {opentepes-4.18.4.dist-info → openTEPES-4.18.5.dist-info}/RECORD +70 -23
- {opentepes-4.18.4.dist-info → openTEPES-4.18.5.dist-info}/WHEEL +1 -1
- {opentepes-4.18.4.dist-info → openTEPES-4.18.5.dist-info}/LICENSE +0 -0
- {opentepes-4.18.4.dist-info → openTEPES-4.18.5.dist-info}/entry_points.txt +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) -
|
|
2
|
+
Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - May 05, 2025
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import time
|
|
@@ -20,10 +20,10 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
20
20
|
#%% solving the problem
|
|
21
21
|
Solver = SolverFactory(SolverName) # select solver
|
|
22
22
|
if SolverName == 'gurobi':
|
|
23
|
-
FileName =
|
|
23
|
+
FileName = f'{_path}/openTEPES_gurobi_{CaseName}_{p}_{sc}_{st}.log'
|
|
24
24
|
if os.path.exists(FileName):
|
|
25
25
|
os.remove(FileName)
|
|
26
|
-
Solver.options['LogFile' ] =
|
|
26
|
+
Solver.options['LogFile' ] = f'{_path}/openTEPES_gurobi_{CaseName}_{p}_{sc}_{st}.log'
|
|
27
27
|
# Solver.options['SolutionTarget'] = 1 # optimal solution with or without basic solutions
|
|
28
28
|
Solver.options['Method' ] = 2 # barrier method
|
|
29
29
|
Solver.options['Crossover' ] = -1
|
|
@@ -32,16 +32,16 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
32
32
|
# Solver.options['RINS' ] = 100
|
|
33
33
|
# Solver.options['BarConvTol' ] = 1e-9
|
|
34
34
|
# Solver.options['BarQCPConvTol' ] = 0.025
|
|
35
|
-
# Solver.options['IISFile' ] =
|
|
35
|
+
# Solver.options['IISFile' ] = f'{_path}/openTEPES_gurobi_'+CaseName+'.ilp' # should be uncommented to show results of IIS
|
|
36
36
|
Solver.options['MIPGap' ] = 0.01
|
|
37
37
|
Solver.options['Threads' ] = int((psutil.cpu_count(logical=True) + psutil.cpu_count(logical=False))/2)
|
|
38
38
|
Solver.options['TimeLimit' ] = 36000
|
|
39
39
|
Solver.options['IterationLimit' ] = 36000000
|
|
40
40
|
if SolverName == 'cplex':
|
|
41
|
-
FileName =
|
|
41
|
+
FileName = f'{_path}/openTEPES_cplex_{CaseName}_{p}_{sc}_{st}.log'
|
|
42
42
|
if os.path.exists(FileName):
|
|
43
43
|
os.remove(FileName)
|
|
44
|
-
# Solver.options['LogFile' ] =
|
|
44
|
+
# Solver.options['LogFile' ] = f'{_path}/openTEPES_cplex_{CaseName}_{p}_{sc}_{st}.log'
|
|
45
45
|
Solver.options['LPMethod' ] = 4 # barrier method
|
|
46
46
|
# Solver.options['BarCrossAlg' ] = 0
|
|
47
47
|
# Solver.options['NumericalEmphasis'] = 1
|
|
@@ -52,10 +52,10 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
52
52
|
Solver.options['TimeLimit' ] = 36000
|
|
53
53
|
# Solver.options['ItLim' ] = 36000000
|
|
54
54
|
if SolverName == 'appsi_highs':
|
|
55
|
-
FileName =
|
|
55
|
+
FileName = f'{_path}/openTEPES_highs_{CaseName}_{p}_{sc}_{st}.log'
|
|
56
56
|
if os.path.exists(FileName):
|
|
57
57
|
os.remove(FileName)
|
|
58
|
-
Solver.options['log_file' ] =
|
|
58
|
+
Solver.options['log_file' ] = f'{_path}/openTEPES_highs_{CaseName}_{p}_{sc}_{st}.log'
|
|
59
59
|
Solver.options['solver' ] = 'choose'
|
|
60
60
|
Solver.options['simplex_strategy' ] = 3
|
|
61
61
|
Solver.options['run_crossover' ] = 'on'
|
|
@@ -65,31 +65,33 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
65
65
|
Solver.options['time_limit' ] = 36000
|
|
66
66
|
Solver.options['simplex_iteration_limit'] = 36000000
|
|
67
67
|
if SolverName == 'gams' or SolverName == 'GAMS':
|
|
68
|
+
FileName = f'{_path}/openTEPES_gams_{CaseName}_{p}_{sc}_{st}.log'
|
|
68
69
|
solver_options = {
|
|
69
|
-
'file COPT / cplex.opt / ; put COPT putclose "LPMethod 4" / "EpGap 0.01" / ; GAMS_MODEL.OptFile = 1 ;'
|
|
70
|
+
'file COPT / cplex.opt / ; put COPT putclose "LPMethod 4" / "EpGap 0.01" / ; GAMS_MODEL.OptFile = 1 ; '
|
|
70
71
|
'option SysOut = off ;',
|
|
71
72
|
'option LP = cplex ; option MIP = cplex ;',
|
|
72
73
|
'option ResLim = 36000 ; option IterLim = 36000000 ;',
|
|
73
74
|
'option Threads = '+str(int((psutil.cpu_count(logical=True) + psutil.cpu_count(logical=False))/2))+' ;'
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
nUnfixedVars = 0
|
|
77
78
|
for var in OptModel.component_data_objects(pyo.Var, active=True, descend_into=True):
|
|
78
|
-
if not var.is_continuous():
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
if not var.is_continuous() and not var.is_fixed() and var.value != None:
|
|
80
|
+
nUnfixedVars += 1
|
|
81
|
+
|
|
82
|
+
if nUnfixedVars == 0:
|
|
81
83
|
OptModel.dual = Suffix(direction=Suffix.IMPORT_EXPORT)
|
|
82
84
|
OptModel.rc = Suffix(direction=Suffix.IMPORT_EXPORT)
|
|
83
85
|
|
|
84
|
-
if SolverName == 'gams':
|
|
85
|
-
SolverResults = Solver.solve(OptModel, tee=True, report_timing=True, symbolic_solver_labels=False, add_options=solver_options)
|
|
86
|
+
if SolverName == 'gams' or SolverName == 'GAMS':
|
|
87
|
+
SolverResults = Solver.solve(OptModel, tee=True, report_timing=True, symbolic_solver_labels=False, add_options=solver_options, logfile=FileName)
|
|
86
88
|
else:
|
|
87
89
|
SolverResults = Solver.solve(OptModel, tee=True, report_timing=True)
|
|
88
90
|
|
|
89
91
|
print('Termination condition: ', SolverResults.solver.termination_condition)
|
|
90
92
|
if SolverResults.solver.termination_condition == TerminationCondition.infeasible or SolverResults.solver.termination_condition == TerminationCondition.maxTimeLimit or SolverResults.solver.termination_condition == TerminationCondition.infeasible.maxIterations:
|
|
91
93
|
log_infeasible_constraints(OptModel, log_expression=True, log_variables=True)
|
|
92
|
-
logging.basicConfig(filename=
|
|
94
|
+
logging.basicConfig(filename=f'{_path}/openTEPES_infeasibilities_{CaseName}_{p}_{sc}_{st}.log', level=logging.INFO)
|
|
93
95
|
raise ValueError('Problem infeasible')
|
|
94
96
|
SolverResults.write() # summary of the solver results
|
|
95
97
|
|
|
@@ -98,17 +100,17 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
98
100
|
# binary operation decisions are fixed to their optimal values
|
|
99
101
|
# if NoRepetition == 1, all variables are fixed
|
|
100
102
|
# if NoRepetition == 0, only the variables of the current period and scenario are fixed
|
|
101
|
-
|
|
103
|
+
nUnfixedVars = 0
|
|
102
104
|
if mTEPES.NoRepetition == 1:
|
|
103
105
|
for var in OptModel.component_data_objects(pyo.Var, active=True, descend_into=True):
|
|
104
|
-
if not var.is_continuous() and not var.is_fixed():
|
|
106
|
+
if not var.is_continuous() and not var.is_fixed() and var.value != None:
|
|
105
107
|
var.fixed = True # fix the current value
|
|
106
|
-
|
|
108
|
+
nUnfixedVars += 1
|
|
107
109
|
else:
|
|
108
110
|
for var in OptModel.component_data_objects(pyo.Var, active=True, descend_into=True):
|
|
109
|
-
if not var.is_continuous() and not var.is_fixed() and var.index()[0] == p and var.index()[1] == sc:
|
|
111
|
+
if not var.is_continuous() and not var.is_fixed() and var.value != None and var.index()[0] == p and var.index()[1] == sc:
|
|
110
112
|
var.fixed = True # fix the current value
|
|
111
|
-
|
|
113
|
+
nUnfixedVars += 1
|
|
112
114
|
|
|
113
115
|
# continuous investment decisions are fixed to their optimal values
|
|
114
116
|
for eb in mTEPES.eb:
|
|
@@ -133,7 +135,7 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
133
135
|
if (p,ni,nf,cc) in mTEPES.phc:
|
|
134
136
|
OptModel.vHeatPipeInvest[p,ni,nf,cc].fix(OptModel.vHeatPipeInvest [p,ni,nf,cc]())
|
|
135
137
|
|
|
136
|
-
if
|
|
138
|
+
if nUnfixedVars > 0:
|
|
137
139
|
OptModel.dual = Suffix(direction=Suffix.IMPORT_EXPORT)
|
|
138
140
|
OptModel.rc = Suffix(direction=Suffix.IMPORT_EXPORT)
|
|
139
141
|
SolverResults = Solver.solve(OptModel, tee=True, report_timing=True)
|
|
@@ -170,16 +172,16 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
170
172
|
print (' Total generation investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pGenInvestCost [eb ] * OptModel.vGenerationInvest [pp,eb ]() for eb in mTEPES.eb if (pp,eb) in mTEPES.peb) +
|
|
171
173
|
sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pGenInvestCost [bc ] * OptModel.vGenerationInvestHeat[pp,bc ]() for bc in mTEPES.bc if (pp,bc) in mTEPES.pbc))
|
|
172
174
|
print (' Total generation retirement cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pGenRetireCost [gd ] * OptModel.vGenerationRetire [pp,gd ]() for gd in mTEPES.gd if (pp,gd) in mTEPES.pgd))
|
|
173
|
-
if mTEPES.pIndHydroTopology == 1 and
|
|
175
|
+
if mTEPES.pIndHydroTopology == 1 and mTEPES.rn:
|
|
174
176
|
print(' Total reservoir investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pRsrInvestCost [rc ] * OptModel.vReservoirInvest [pp,rc ]() for rc in mTEPES.rn if (pp,rc) in mTEPES.prc))
|
|
175
177
|
else:
|
|
176
178
|
print(' Total reservoir investment cost [MEUR] ', 0.0)
|
|
177
179
|
print (' Total network investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pNetFixedCost [ni,nf,cc] * OptModel.vNetworkInvest [pp,ni,nf,cc]() for ni,nf,cc in mTEPES.lc if (pp,ni,nf,cc) in mTEPES.plc))
|
|
178
|
-
if mTEPES.pIndHydrogen == 1 and
|
|
180
|
+
if mTEPES.pIndHydrogen == 1 and mTEPES.pc:
|
|
179
181
|
print(' Total H2 pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pH2PipeFixedCost [ni,nf,cc] * OptModel.vH2PipeInvest [pp,ni,nf,cc]() for ni,nf,cc in mTEPES.pc if (pp,ni,nf,cc) in mTEPES.ppc))
|
|
180
182
|
else:
|
|
181
183
|
print(' Total H2 pipe investment cost [MEUR] ', 0.0)
|
|
182
|
-
if mTEPES.pIndHeat == 1 and
|
|
184
|
+
if mTEPES.pIndHeat == 1 and mTEPES.hc:
|
|
183
185
|
print(' Total heat pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pHeatPipeFixedCost[ni,nf,cc] * OptModel.vHeatPipeInvest [pp,ni,nf,cc]() for ni,nf,cc in mTEPES.hc if (pp,ni,nf,cc) in mTEPES.phc))
|
|
184
186
|
else:
|
|
185
187
|
print(' Total heat pipe investment cost [MEUR] ', 0.0)
|
|
@@ -192,16 +194,16 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
192
194
|
print (' Total generation investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pGenInvestCost [eb ] * OptModel.vGenerationInvest [p,eb ]() for eb in mTEPES.eb if (p,eb) in mTEPES.peb) +
|
|
193
195
|
sum(mTEPES.pDiscountedWeight[p] * mTEPES.pGenInvestCost [bc ] * OptModel.vGenerationInvestHeat[p,bc ]() for bc in mTEPES.bc if (p,bc) in mTEPES.pbc))
|
|
194
196
|
print (' Total generation retirement cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pGenRetireCost [gd ] * OptModel.vGenerationRetire [p,gd ]() for gd in mTEPES.gd if (p,gd) in mTEPES.pgd))
|
|
195
|
-
if mTEPES.pIndHydroTopology == 1 and
|
|
197
|
+
if mTEPES.pIndHydroTopology == 1 and mTEPES.rn:
|
|
196
198
|
print (' Total reservoir investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pRsrInvestCost [rc ] * OptModel.vReservoirInvest [p,rc ]() for rc in mTEPES.rn if (p,rc) in mTEPES.prc))
|
|
197
199
|
else:
|
|
198
200
|
print (' Total reservoir investment cost [MEUR] ', 0.0)
|
|
199
201
|
print (' Total network investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pNetFixedCost [ni,nf,cc] * OptModel.vNetworkInvest [p,ni,nf,cc ]() for ni,nf,cc in mTEPES.lc if (p,ni,nf,cc) in mTEPES.plc))
|
|
200
|
-
if mTEPES.pIndHydrogen == 1 and
|
|
202
|
+
if mTEPES.pIndHydrogen == 1 and mTEPES.pc:
|
|
201
203
|
print (' Total H2 pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pH2PipeFixedCost [ni,nf,cc] * OptModel.vH2PipeInvest [p,ni,nf,cc ]() for ni,nf,cc in mTEPES.pc if (p,ni,nf,cc) in mTEPES.ppc))
|
|
202
204
|
else:
|
|
203
205
|
print (' Total H2 pipe investment cost [MEUR] ', 0.0)
|
|
204
|
-
if mTEPES.pIndHeat == 1 and
|
|
206
|
+
if mTEPES.pIndHeat == 1 and mTEPES.hc:
|
|
205
207
|
print (' Total heat pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pHeatPipeFixedCost[ni,nf,cc] * OptModel.vHeatPipeInvest [p,ni,nf,cc ]() for ni,nf,cc in mTEPES.hc if (p,ni,nf,cc) in mTEPES.phc))
|
|
206
208
|
else:
|
|
207
209
|
print (' Total heat pipe investment cost [MEUR] ', 0.0)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
2
|
Name: openTEPES
|
|
3
|
-
Version: 4.18.
|
|
3
|
+
Version: 4.18.5
|
|
4
4
|
Summary: Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES)
|
|
5
|
-
Home-page: https://
|
|
5
|
+
Home-page: https://opentepes.readthedocs.io/en/latest/index.html
|
|
6
6
|
Author: IIT-EnergySystemModels
|
|
7
7
|
Author-email: andres.ramos@comillas.edu
|
|
8
8
|
Requires-Python: >=3.11
|
|
@@ -25,8 +25,8 @@ Requires-Dist: networkx>=3.3
|
|
|
25
25
|
Requires-Dist: dill>=0.3.8
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
.. image::
|
|
29
|
-
:target: https://
|
|
28
|
+
.. image:: doc/img/openTEPES.png
|
|
29
|
+
:target: https://opentepes.readthedocs.io/en/latest/index.html
|
|
30
30
|
:alt: logo
|
|
31
31
|
:align: center
|
|
32
32
|
|
|
@@ -66,8 +66,10 @@ The **openTEPES** model has been developed at the `Instituto de Investigación T
|
|
|
66
66
|
The **openTEPES** model presents a decision support system for defining the **integrated generation, storage, and transmission resource planning** (IRP, GEP+SEP+TEP) -**Integrated Resource Planning** (IRP)- of a **large-scale electric system** at a tactical level (i.e., time horizons of 5-30 years),
|
|
67
67
|
defined as a set of **generation, storage, and (electricity, hydrogen, and heat) networks dynamic investment decisions for multiple future years**.
|
|
68
68
|
|
|
69
|
+
The `openTEPES complete documentation <https://opentepes.readthedocs.io/en/latest/index.html>`_ presents the input data, output results, mathematical formulation, download and installation, and the research projects where the model has been used.
|
|
70
|
+
|
|
69
71
|
It is integrated into the `open energy system modelling platform <https://openenergymodels.net/>`_, helping model Europe's energy system and in the list of `energy models published under open source licenses <https://wiki.openmod-initiative.org/wiki/Open_Models>`_.
|
|
70
|
-
It is also part of the Africa
|
|
72
|
+
It is also part of the `Africa's open energy system modelling toolbox <https://africaenergymodels.net/models/>`_, which is a suite of open and linked state-of-the-art open-source energy system models for Africa, and of the `African Energy modelling Network Open-Source Tools <https://africanenergymodellingnetwork.net/en/focus-area-3-open-source-tools-and-data>`_.
|
|
71
73
|
|
|
72
74
|
Scripts are provided to exchange information with Integrated Assessment Models (IAM) using their `nomenclature and data formats <https://nomenclature-iamc.readthedocs.io/en/stable/>`_.
|
|
73
75
|
|
|
@@ -79,6 +81,12 @@ Reference
|
|
|
79
81
|
|
|
80
82
|
**openTEPES**: `summary presentation <https://pascua.iit.comillas.edu/aramos/openTEPES.pdf>`_, `présentation (French) <https://pascua.iit.comillas.edu/aramos/openTEPES_fr.pdf>`_, and `installation <https://pascua.iit.comillas.edu/aramos/openTEPES_installation.pdf>`_
|
|
81
83
|
|
|
84
|
+
Authors
|
|
85
|
+
########
|
|
86
|
+
**Andrés Ramos, Erik Alvarez, Francisco Labora, Sara Lumbreras**. Universidad Pontificia Comillas, Instituto de Investigación Tecnológica, Alberto Aguilera 23, 28015 Madrid, Spain
|
|
87
|
+
|
|
88
|
+
Contact: andres.ramos@comillas.edu
|
|
89
|
+
|
|
82
90
|
Description
|
|
83
91
|
############
|
|
84
92
|
**openTEPES** determines the investment plans of new facilities (generators, ESS, and lines)
|
|
@@ -149,7 +157,7 @@ Miniconda (recommended)
|
|
|
149
157
|
2. The `HiGHS <https://ergo-code.github.io/HiGHS/dev/interfaces/python/#python-getting-started>`_ is our recommendation if you want a free and open-source solver.
|
|
150
158
|
3. Install openTEPES via pip by ``pip install openTEPES``
|
|
151
159
|
|
|
152
|
-
Continue at `Get Started <#get-started>`_
|
|
160
|
+
Continue at `Get Started <#get-started>`_.
|
|
153
161
|
|
|
154
162
|
|
|
155
163
|
GitHub Repository (the hard way)
|
|
@@ -223,15 +231,6 @@ Then, the **results** should be written in the folder who is called with the cas
|
|
|
223
231
|
|
|
224
232
|
``openTEPES_run(<dir>, <case>, <solver>, <results>, <log>)``
|
|
225
233
|
|
|
226
|
-
Tips
|
|
227
|
-
####
|
|
228
|
-
|
|
229
|
-
1. A complete documentation of the openTEPES model can be found at `<https://opentepes.readthedocs.io/en/latest/index.html>`_, which presents the mathematical formulation, input data and output results.
|
|
230
|
-
2. Try modifying the **TimeStep** in **oT_Data_Parameter_<case>.csv** and see their effect on results.
|
|
231
|
-
3. Using **0** or **1**, the optimization options can be activated or deactivated in **oT_Data_Option_<case>.csv**.
|
|
232
|
-
4. If you need a nice python editor, think about using `PyCharm <https://www.jetbrains.com/pycharm/>`_. It has many features including project management, etc.
|
|
233
|
-
5. We also suggest the use of `Gurobi <https://www.gurobi.com/academia/academic-program-and-licenses/>`_ (for Academics and Recent Graduates) as a solver to deal with MIP and LP problems instead of GLPK.
|
|
234
|
-
|
|
235
234
|
Run the Tutorial
|
|
236
235
|
################
|
|
237
236
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
openTEPES/__init__.py,sha256=
|
|
1
|
+
openTEPES/__init__.py,sha256=0LrESaXoSN5ntta3lWySc71R8nXHjJg0CqsW2WtGuxo,832
|
|
2
2
|
openTEPES/openTEPES.mapbox_token,sha256=xsXNkwGp2vzXqQy2zVkyLhhNcNWniK2BMeOFpc5SZHI,93
|
|
3
|
-
openTEPES/openTEPES.py,sha256=
|
|
4
|
-
openTEPES/openTEPES_InputData.py,sha256=
|
|
5
|
-
openTEPES/openTEPES_Main.py,sha256=
|
|
6
|
-
openTEPES/openTEPES_ModelFormulation.py,sha256=
|
|
7
|
-
openTEPES/openTEPES_OutputResults.py,sha256=
|
|
8
|
-
openTEPES/openTEPES_ProblemSolving.py,sha256=
|
|
3
|
+
openTEPES/openTEPES.py,sha256=7OxyRstC3-tSDSDAIpbaC-R6DhKnPZr0Iz4DRQV6X54,27285
|
|
4
|
+
openTEPES/openTEPES_InputData.py,sha256=ImmkRzRwPhSjJIZbFcXw5tvquLCewKVAHvZmjCOGo6g,224488
|
|
5
|
+
openTEPES/openTEPES_Main.py,sha256=w3s55T1QDfMCHtCROI05gIzgXeMShZ5EW90C5XNlQwE,39914
|
|
6
|
+
openTEPES/openTEPES_ModelFormulation.py,sha256=r5rT_a7MGeofXQ4D_S9Hz8gUUCaGTAmWUnMbOD5Q4bI,136424
|
|
7
|
+
openTEPES/openTEPES_OutputResults.py,sha256=LJLl-GlE184Jde6FNCADK1ZSfF8V077mEai20JoC2MY,221372
|
|
8
|
+
openTEPES/openTEPES_ProblemSolving.py,sha256=WATzENUIGOlvbjAH44F6AEnAVgm9g91hiaWMsjCn5YI,15934
|
|
9
9
|
openTEPES/openTEPES_gitinfo.py,sha256=6fA1fa-JcyusSc_HcjPiCgnV9zn-fZwdG-kK0a5Fxc8,2004
|
|
10
10
|
openTEPES/.idea/.name,sha256=jiwfcnJ20wztcvpny4SHcqmAIWK-w5tCqN9TWf0GOkw,11
|
|
11
11
|
openTEPES/.idea/misc.xml,sha256=m4-3O284ZBS8WZSQD0QWwk8YjuQYz92w6kr7NRFNips,298
|
|
@@ -102,6 +102,53 @@ openTEPES/9n7y/oT_Dict_Storage_9n7y.csv,sha256=GbyzeENaCG-Yx67tdPsZhF1qUY-OVDKQP
|
|
|
102
102
|
openTEPES/9n7y/oT_Dict_Technology_9n7y.csv,sha256=9WQUthNC8T5Sy4rdm2XvqcUMXebxQ7jNnAai3OrfgJ0,47
|
|
103
103
|
openTEPES/9n7y/oT_Dict_ZoneToArea_9n7y.csv,sha256=ub27ppJJ-NYjYX7hmL9ua6ACYzDUV9XWgTLdHulvZ2c,128
|
|
104
104
|
openTEPES/9n7y/oT_Dict_Zone_9n7y.csv,sha256=-EFkGBbP6FddAAYIksLik2ktnW008aLg3ZwNPDp9s6M,69
|
|
105
|
+
openTEPES/9n_PTDF/oT_Data_Demand_9n_PTDF.csv,sha256=LsMcM_06kkRn1eXbA2TknF-n20ghARxBLdKVUXlHF0A,1196560
|
|
106
|
+
openTEPES/9n_PTDF/oT_Data_Duration_9n_PTDF.csv,sha256=MNMIViQ0Q0g3TLP9fgQUBhalqLFnprOv-HWozXW_7gE,332010
|
|
107
|
+
openTEPES/9n_PTDF/oT_Data_Emission_9n_PTDF.csv,sha256=rYwkA8jTZyx47BP54DfyN4443WbBelCc_X76K1bp-zU,41
|
|
108
|
+
openTEPES/9n_PTDF/oT_Data_EnergyInflows_9n_PTDF.csv,sha256=oEXYvy2pjKpIpi9HmPFMipdeHlKeoMv8jhyDbISQZQc,437023
|
|
109
|
+
openTEPES/9n_PTDF/oT_Data_EnergyOutflows_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
110
|
+
openTEPES/9n_PTDF/oT_Data_Generation_9n_PTDF.csv,sha256=0jgZt1ZD68uAnOQnTITYEdKKjWqNCSEMUwUcgVDh6jI,2564
|
|
111
|
+
openTEPES/9n_PTDF/oT_Data_Inertia_9n_PTDF.csv,sha256=nndR80BBM7wKH9Ej3LrSuG0U4a0eKtT8LVmm79brjIY,288321
|
|
112
|
+
openTEPES/9n_PTDF/oT_Data_Network_9n_PTDF.csv,sha256=zcRFVagDQ3EL9J9Q85C1muzjLuLvhk8VUbfQh0sX1aw,1213
|
|
113
|
+
openTEPES/9n_PTDF/oT_Data_NodeLocation_9n_PTDF.csv,sha256=eaz-9dcwWLoQUEp-oafd4jcetaQ_Grjgp0gh0oIv6k4,303
|
|
114
|
+
openTEPES/9n_PTDF/oT_Data_OperatingReserveDown_9n_PTDF.csv,sha256=VqBDqfaIPiD1guy1rLNAYEEZYWypabaFR4u57YNz0fw,383843
|
|
115
|
+
openTEPES/9n_PTDF/oT_Data_OperatingReserveUp_9n_PTDF.csv,sha256=VqBDqfaIPiD1guy1rLNAYEEZYWypabaFR4u57YNz0fw,383843
|
|
116
|
+
openTEPES/9n_PTDF/oT_Data_Option_9n_PTDF.csv,sha256=2onSiuxVxB0WXX45pBWpfb6uoGY1o_FuAYKrp7w3cpQ,230
|
|
117
|
+
openTEPES/9n_PTDF/oT_Data_Parameter_9n_PTDF.csv,sha256=Gn-pzaThuI_w9USJwZ-AGDy5VnXMuVnmiac3W1sm2ds,220
|
|
118
|
+
openTEPES/9n_PTDF/oT_Data_Period_9n_PTDF.csv,sha256=NFbJq1PV7fhKMp7ocoy_hy42mKuVabBdPqe9Pt2IVQ4,26
|
|
119
|
+
openTEPES/9n_PTDF/oT_Data_RESEnergy_9n_PTDF.csv,sha256=zOj39jlgP1Pj6oIWDY8Kr-ysvvKUhkap5zCZn9s68is,40
|
|
120
|
+
openTEPES/9n_PTDF/oT_Data_ReserveMargin_9n_PTDF.csv,sha256=WCIVw1Yr64PzAOBRta-7h4Ri8G0kLNvdu7700sQr6Yg,46
|
|
121
|
+
openTEPES/9n_PTDF/oT_Data_Scenario_9n_PTDF.csv,sha256=UGeFNxqb6ysUgpVrLESkfFGy-3X9nzJoeRooynFTTQQ,45
|
|
122
|
+
openTEPES/9n_PTDF/oT_Data_Stage_9n_PTDF.csv,sha256=fHzcT28maF4tn7D92epcXLZqsQct_ZrmOfLGZj12B6Q,24
|
|
123
|
+
openTEPES/9n_PTDF/oT_Data_VariableEmissionCost_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
124
|
+
openTEPES/9n_PTDF/oT_Data_VariableFuelCost_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
125
|
+
openTEPES/9n_PTDF/oT_Data_VariableMaxConsumption_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
126
|
+
openTEPES/9n_PTDF/oT_Data_VariableMaxEnergy_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
127
|
+
openTEPES/9n_PTDF/oT_Data_VariableMaxGeneration_9n_PTDF.csv,sha256=2unfNkFYcQYNzI-M8-PoSFVI0aVVJmUO-pGKVEkRgX4,565976
|
|
128
|
+
openTEPES/9n_PTDF/oT_Data_VariableMaxStorage_9n_PTDF.csv,sha256=oEXYvy2pjKpIpi9HmPFMipdeHlKeoMv8jhyDbISQZQc,437023
|
|
129
|
+
openTEPES/9n_PTDF/oT_Data_VariableMinConsumption_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
130
|
+
openTEPES/9n_PTDF/oT_Data_VariableMinEnergy_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
131
|
+
openTEPES/9n_PTDF/oT_Data_VariableMinGeneration_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
132
|
+
openTEPES/9n_PTDF/oT_Data_VariableMinStorage_9n_PTDF.csv,sha256=oEXYvy2pjKpIpi9HmPFMipdeHlKeoMv8jhyDbISQZQc,437023
|
|
133
|
+
openTEPES/9n_PTDF/oT_Data_VariablePTDF_9n_PTDF.csv,sha256=wetQwHN8CURqlCfF8pHbNE03Db6IV19MSlH19-VXleY,445800
|
|
134
|
+
openTEPES/9n_PTDF/oT_Data_VariableTTCBck_9n_PTDF.csv,sha256=nwKz0WpSjuJfWhlwoSi773y4oPZmfjlM6WFxmz9gbw0,314549
|
|
135
|
+
openTEPES/9n_PTDF/oT_Data_VariableTTCFrw_9n_PTDF.csv,sha256=nwKz0WpSjuJfWhlwoSi773y4oPZmfjlM6WFxmz9gbw0,314549
|
|
136
|
+
openTEPES/9n_PTDF/oT_Dict_AreaToRegion_9n_PTDF.csv,sha256=Tj0yBL-v69HHH4eZD1DGWRLNZsZci9lP3LLKDAo15qA,23
|
|
137
|
+
openTEPES/9n_PTDF/oT_Dict_Area_9n_PTDF.csv,sha256=gPrgfhexkukh9zR4hjcUvmYaJCkoQndGtKpnlPR68iY,13
|
|
138
|
+
openTEPES/9n_PTDF/oT_Dict_Circuit_9n_PTDF.csv,sha256=HA_AvO-c5JJ0A5mgMEzk4YzTmsA4hk02WkyIwEJMZsg,19
|
|
139
|
+
openTEPES/9n_PTDF/oT_Dict_Generation_9n_PTDF.csv,sha256=ooB6zMs5bAUlVzm3R_g-sfX8ZA2G7S6sWreqsRU0NM4,209
|
|
140
|
+
openTEPES/9n_PTDF/oT_Dict_Line_9n_PTDF.csv,sha256=xg4OpM5ldCbkhLOrAgZiJbZekkwtD5lpwxYE6dCzzLA,18
|
|
141
|
+
openTEPES/9n_PTDF/oT_Dict_LoadLevel_9n_PTDF.csv,sha256=FNuj3oD4Npror74ru-HGnm3wD8rLhJFTu2u4jMUYJ4o,192203
|
|
142
|
+
openTEPES/9n_PTDF/oT_Dict_NodeToZone_9n_PTDF.csv,sha256=hn2BuMq73Hmw3AZRZhZ8X2Ltnvk0tKvhSdEeAO3NqM8,137
|
|
143
|
+
openTEPES/9n_PTDF/oT_Dict_Node_9n_PTDF.csv,sha256=dIZAxYlhLVGWv2r0tmb91rTnaAY8VjvjYa6rzexxo9I,78
|
|
144
|
+
openTEPES/9n_PTDF/oT_Dict_Period_9n_PTDF.csv,sha256=1zv4VAX7gc0fMHgXbmMdzWbaPT-3EwAM29WixPc_zyo,14
|
|
145
|
+
openTEPES/9n_PTDF/oT_Dict_Region_9n_PTDF.csv,sha256=7ypbm_FG7DsOw1xg4KL4UvRbDdiHzwM1uU5eecX9kjA,128
|
|
146
|
+
openTEPES/9n_PTDF/oT_Dict_Scenario_9n_PTDF.csv,sha256=UFD1pqOy6af_SLucKNhgs-CCcoSkZ6OB7YcxLhIpeqs,16
|
|
147
|
+
openTEPES/9n_PTDF/oT_Dict_Stage_9n_PTDF.csv,sha256=PyWDtx6UFjodj7r4qZktaFfzPVgGzOA-cPLNW1CIjGw,12
|
|
148
|
+
openTEPES/9n_PTDF/oT_Dict_Storage_9n_PTDF.csv,sha256=GbyzeENaCG-Yx67tdPsZhF1qUY-OVDKQP2TOSbugPVk,28
|
|
149
|
+
openTEPES/9n_PTDF/oT_Dict_Technology_9n_PTDF.csv,sha256=9WQUthNC8T5Sy4rdm2XvqcUMXebxQ7jNnAai3OrfgJ0,47
|
|
150
|
+
openTEPES/9n_PTDF/oT_Dict_ZoneToArea_9n_PTDF.csv,sha256=ub27ppJJ-NYjYX7hmL9ua6ACYzDUV9XWgTLdHulvZ2c,128
|
|
151
|
+
openTEPES/9n_PTDF/oT_Dict_Zone_9n_PTDF.csv,sha256=-EFkGBbP6FddAAYIksLik2ktnW008aLg3ZwNPDp9s6M,69
|
|
105
152
|
openTEPES/NG2030/oT_Data_Demand_NG2030.csv,sha256=Ebg6bwYYLjiHsd5nkbVgS8yHgfVLfaUx3HSONT_9fms,12342624
|
|
106
153
|
openTEPES/NG2030/oT_Data_Duration_NG2030.csv,sha256=Wzg3rbdRY-tkz_-Im_WZvUTbw7uJQAqiWKqqyX1wRQE,995946
|
|
107
154
|
openTEPES/NG2030/oT_Data_Emission_NG2030.csv,sha256=FGgWg3G127ufYGa5nG-9k16tlQj__DYJxfUxf9yXLuo,43
|
|
@@ -218,22 +265,22 @@ openTEPES/RTS-GMLC_6y/oT_Data_VariableMinConsumption_RTS-GMLC_6y.csv,sha256=TZB_
|
|
|
218
265
|
openTEPES/RTS-GMLC_6y/oT_Data_VariableMinEnergy_RTS-GMLC_6y.csv,sha256=TZB_4NU_utULtvgq-RGNviZukUjzvyjakn9sVH_-hRs,12582183
|
|
219
266
|
openTEPES/RTS-GMLC_6y/oT_Data_VariableMinGeneration_RTS-GMLC_6y.csv,sha256=TZB_4NU_utULtvgq-RGNviZukUjzvyjakn9sVH_-hRs,12582183
|
|
220
267
|
openTEPES/RTS-GMLC_6y/oT_Data_VariableMinStorage_RTS-GMLC_6y.csv,sha256=TZB_4NU_utULtvgq-RGNviZukUjzvyjakn9sVH_-hRs,12582183
|
|
221
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_AreaToRegion_RTS-GMLC_6y.csv,sha256=
|
|
222
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Area_RTS-GMLC_6y.csv,sha256=
|
|
223
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Circuit_RTS-GMLC_6y.csv,sha256
|
|
268
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_AreaToRegion_RTS-GMLC_6y.csv,sha256=AC7WhEMDMekOKE9-kUHV-Dy92zmWKo6-YNL9vyps_j8,64
|
|
269
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Area_RTS-GMLC_6y.csv,sha256=VR1A8dGJ-9UcRtiyYaJwANd-7faXMtPggvkhNQ4RBf8,30
|
|
270
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Circuit_RTS-GMLC_6y.csv,sha256=-5ia4UT_W0lrWYYVyFV9D6-q6nA93timI8MYf_XaWxY,33
|
|
224
271
|
openTEPES/RTS-GMLC_6y/oT_Dict_Generation_RTS-GMLC_6y.csv,sha256=w6kE1V9QiFoihhMs43minFkyFWRzwQtWnSYsF96_7WA,2535
|
|
225
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Line_RTS-GMLC_6y.csv,sha256=
|
|
272
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Line_RTS-GMLC_6y.csv,sha256=xg4OpM5ldCbkhLOrAgZiJbZekkwtD5lpwxYE6dCzzLA,18
|
|
226
273
|
openTEPES/RTS-GMLC_6y/oT_Dict_LoadLevel_RTS-GMLC_6y.csv,sha256=FNuj3oD4Npror74ru-HGnm3wD8rLhJFTu2u4jMUYJ4o,192203
|
|
227
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_NodeToZone_RTS-GMLC_6y.csv,sha256=
|
|
274
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_NodeToZone_RTS-GMLC_6y.csv,sha256=p0TKIjW16gSR5F51FnP-5E_oACrxzPo0glTt0OoglBE,1325
|
|
228
275
|
openTEPES/RTS-GMLC_6y/oT_Dict_Node_RTS-GMLC_6y.csv,sha256=2YRl6OD1hV1lR8LiTN-PYjX8bW2v3BktmLVMRl8HW74,736
|
|
229
276
|
openTEPES/RTS-GMLC_6y/oT_Dict_Period_RTS-GMLC_6y.csv,sha256=Jp7qufLCOXwJ1kSCruPE64llGaTj4wVqe79u5H4LPKg,44
|
|
230
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Region_RTS-GMLC_6y.csv,sha256=
|
|
231
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Scenario_RTS-GMLC_6y.csv,sha256=
|
|
277
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Region_RTS-GMLC_6y.csv,sha256=xd-mTmEwgSbq3wu8mbiMhvW4D_h9Y9sX9-M4C7j_Jyc,18
|
|
278
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Scenario_RTS-GMLC_6y.csv,sha256=UFD1pqOy6af_SLucKNhgs-CCcoSkZ6OB7YcxLhIpeqs,16
|
|
232
279
|
openTEPES/RTS-GMLC_6y/oT_Dict_Stage_RTS-GMLC_6y.csv,sha256=cZKl_y6qUHVS8cLY2EFYwGyb8Bzw8043XqkYZJhOOr0,76
|
|
233
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Storage_RTS-GMLC_6y.csv,sha256=
|
|
234
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Technology_RTS-GMLC_6y.csv,sha256=
|
|
235
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_ZoneToArea_RTS-GMLC_6y.csv,sha256=
|
|
236
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Zone_RTS-GMLC_6y.csv,sha256=
|
|
280
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Storage_RTS-GMLC_6y.csv,sha256=GbyzeENaCG-Yx67tdPsZhF1qUY-OVDKQP2TOSbugPVk,28
|
|
281
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Technology_RTS-GMLC_6y.csv,sha256=TpbqRLfZsKkqXtVZNRxBrmis9claViI_UQzw7zyvCuA,76
|
|
282
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_ZoneToArea_RTS-GMLC_6y.csv,sha256=lj86EH-OBqXsts32_AyCPKWtyH8aFRAnHfJls6tJI_8,347
|
|
283
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Zone_RTS-GMLC_6y.csv,sha256=mwTHNLbVoLCLclucd4IC1p4Ui8eK7td5FYYUHb8QMxk,195
|
|
237
284
|
openTEPES/RTS24/oT_Data_Demand_RTS24.csv,sha256=18rtSbDL9CNMYanislGY7DmgFm0MqZIPF57gFurjFu8,1824986
|
|
238
285
|
openTEPES/RTS24/oT_Data_Duration_RTS24.csv,sha256=MNMIViQ0Q0g3TLP9fgQUBhalqLFnprOv-HWozXW_7gE,332010
|
|
239
286
|
openTEPES/RTS24/oT_Data_Emission_RTS24.csv,sha256=fuUh5xa2V53QHSLlDxWeG4g9CwOmNwWADwDOpqMvfeA,58
|
|
@@ -335,8 +382,8 @@ openTEPES/sSEP/oT_Dict_Storage_sSEP.csv,sha256=H2rJXZvoMuT-25sI2GpG8IuiNKD-dxuty
|
|
|
335
382
|
openTEPES/sSEP/oT_Dict_Technology_sSEP.csv,sha256=MCTpplzz7_eVPKQfOw35c86ib6CTtW6UK6JrbCJ8wls,170
|
|
336
383
|
openTEPES/sSEP/oT_Dict_ZoneToArea_sSEP.csv,sha256=AUDCs5Bg6sw9f2pVjGP1o4IJjXFF_VrokOGf_V3QsEI,24
|
|
337
384
|
openTEPES/sSEP/oT_Dict_Zone_sSEP.csv,sha256=TBud-fvbFbiAsuutxTYe8wWlv_x1P8oyWXILMpYiXJc,13
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
385
|
+
openTEPES-4.18.5.dist-info/entry_points.txt,sha256=gNNPrDaTsRuRJXI1FLNgqMX1CiJ45bEp1dEDH7ZB8Oc,49
|
|
386
|
+
openTEPES-4.18.5.dist-info/LICENSE,sha256=4O7bphXVzRuYavtsWzpLGuM3E-fp3HTRna7F4yIfnS4,35184
|
|
387
|
+
openTEPES-4.18.5.dist-info/WHEEL,sha256=jPMR_Dzkc4X4icQtmz81lnNY_kAsfog7ry7qoRvYLXw,81
|
|
388
|
+
openTEPES-4.18.5.dist-info/METADATA,sha256=iydsNCxTCunfmrstvG17guqA4-NK4Plk5i08Qle042s,18201
|
|
389
|
+
openTEPES-4.18.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|