openTEPES 4.18.3__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.
Files changed (70) hide show
  1. openTEPES/9n_PTDF/oT_Data_Demand_9n_PTDF.csv +8737 -0
  2. openTEPES/9n_PTDF/oT_Data_Duration_9n_PTDF.csv +8737 -0
  3. openTEPES/9n_PTDF/oT_Data_Emission_9n_PTDF.csv +2 -0
  4. openTEPES/9n_PTDF/oT_Data_EnergyInflows_9n_PTDF.csv +8737 -0
  5. openTEPES/9n_PTDF/oT_Data_EnergyOutflows_9n_PTDF.csv +8737 -0
  6. openTEPES/9n_PTDF/oT_Data_Generation_9n_PTDF.csv +17 -0
  7. openTEPES/9n_PTDF/oT_Data_Inertia_9n_PTDF.csv +8737 -0
  8. openTEPES/9n_PTDF/oT_Data_Network_9n_PTDF.csv +14 -0
  9. openTEPES/9n_PTDF/oT_Data_NodeLocation_9n_PTDF.csv +10 -0
  10. openTEPES/9n_PTDF/oT_Data_OperatingReserveDown_9n_PTDF.csv +8737 -0
  11. openTEPES/9n_PTDF/oT_Data_OperatingReserveUp_9n_PTDF.csv +8737 -0
  12. openTEPES/9n_PTDF/oT_Data_Option_9n_PTDF.csv +2 -0
  13. openTEPES/9n_PTDF/oT_Data_Parameter_9n_PTDF.csv +2 -0
  14. openTEPES/9n_PTDF/oT_Data_Period_9n_PTDF.csv +2 -0
  15. openTEPES/9n_PTDF/oT_Data_RESEnergy_9n_PTDF.csv +2 -0
  16. openTEPES/9n_PTDF/oT_Data_ReserveMargin_9n_PTDF.csv +2 -0
  17. openTEPES/9n_PTDF/oT_Data_Scenario_9n_PTDF.csv +2 -0
  18. openTEPES/9n_PTDF/oT_Data_Stage_9n_PTDF.csv +2 -0
  19. openTEPES/9n_PTDF/oT_Data_VariableEmissionCost_9n_PTDF.csv +8737 -0
  20. openTEPES/9n_PTDF/oT_Data_VariableFuelCost_9n_PTDF.csv +8737 -0
  21. openTEPES/9n_PTDF/oT_Data_VariableMaxConsumption_9n_PTDF.csv +8737 -0
  22. openTEPES/9n_PTDF/oT_Data_VariableMaxEnergy_9n_PTDF.csv +8737 -0
  23. openTEPES/9n_PTDF/oT_Data_VariableMaxGeneration_9n_PTDF.csv +8737 -0
  24. openTEPES/9n_PTDF/oT_Data_VariableMaxStorage_9n_PTDF.csv +8737 -0
  25. openTEPES/9n_PTDF/oT_Data_VariableMinConsumption_9n_PTDF.csv +8737 -0
  26. openTEPES/9n_PTDF/oT_Data_VariableMinEnergy_9n_PTDF.csv +8737 -0
  27. openTEPES/9n_PTDF/oT_Data_VariableMinGeneration_9n_PTDF.csv +8737 -0
  28. openTEPES/9n_PTDF/oT_Data_VariableMinStorage_9n_PTDF.csv +8737 -0
  29. openTEPES/9n_PTDF/oT_Data_VariablePTDF_9n_PTDF.csv +8740 -0
  30. openTEPES/9n_PTDF/oT_Data_VariableTTCBck_9n_PTDF.csv +8739 -0
  31. openTEPES/9n_PTDF/oT_Data_VariableTTCFrw_9n_PTDF.csv +8739 -0
  32. openTEPES/9n_PTDF/oT_Dict_AreaToRegion_9n_PTDF.csv +2 -0
  33. openTEPES/9n_PTDF/oT_Dict_Area_9n_PTDF.csv +2 -0
  34. openTEPES/9n_PTDF/oT_Dict_Circuit_9n_PTDF.csv +3 -0
  35. openTEPES/9n_PTDF/oT_Dict_Generation_9n_PTDF.csv +17 -0
  36. openTEPES/9n_PTDF/oT_Dict_Line_9n_PTDF.csv +3 -0
  37. openTEPES/9n_PTDF/oT_Dict_LoadLevel_9n_PTDF.csv +8737 -0
  38. openTEPES/9n_PTDF/oT_Dict_NodeToZone_9n_PTDF.csv +10 -0
  39. openTEPES/9n_PTDF/oT_Dict_Node_9n_PTDF.csv +10 -0
  40. openTEPES/9n_PTDF/oT_Dict_Period_9n_PTDF.csv +2 -0
  41. openTEPES/9n_PTDF/oT_Dict_Region_9n_PTDF.csv +31 -0
  42. openTEPES/9n_PTDF/oT_Dict_Scenario_9n_PTDF.csv +2 -0
  43. openTEPES/9n_PTDF/oT_Dict_Stage_9n_PTDF.csv +2 -0
  44. openTEPES/9n_PTDF/oT_Dict_Storage_9n_PTDF.csv +3 -0
  45. openTEPES/9n_PTDF/oT_Dict_Technology_9n_PTDF.csv +7 -0
  46. openTEPES/9n_PTDF/oT_Dict_ZoneToArea_9n_PTDF.csv +10 -0
  47. openTEPES/9n_PTDF/oT_Dict_Zone_9n_PTDF.csv +10 -0
  48. openTEPES/RTS-GMLC_6y/oT_Dict_AreaToRegion_RTS-GMLC_6y.csv +4 -4
  49. openTEPES/RTS-GMLC_6y/oT_Dict_Area_RTS-GMLC_6y.csv +4 -4
  50. openTEPES/RTS-GMLC_6y/oT_Dict_Circuit_RTS-GMLC_6y.csv +5 -5
  51. openTEPES/RTS-GMLC_6y/oT_Dict_Line_RTS-GMLC_6y.csv +3 -3
  52. openTEPES/RTS-GMLC_6y/oT_Dict_NodeToZone_RTS-GMLC_6y.csv +74 -74
  53. openTEPES/RTS-GMLC_6y/oT_Dict_Region_RTS-GMLC_6y.csv +2 -2
  54. openTEPES/RTS-GMLC_6y/oT_Dict_Scenario_RTS-GMLC_6y.csv +2 -2
  55. openTEPES/RTS-GMLC_6y/oT_Dict_Storage_RTS-GMLC_6y.csv +3 -3
  56. openTEPES/RTS-GMLC_6y/oT_Dict_Technology_RTS-GMLC_6y.csv +10 -10
  57. openTEPES/RTS-GMLC_6y/oT_Dict_ZoneToArea_RTS-GMLC_6y.csv +22 -22
  58. openTEPES/RTS-GMLC_6y/oT_Dict_Zone_RTS-GMLC_6y.csv +22 -22
  59. openTEPES/__init__.py +1 -1
  60. openTEPES/openTEPES.py +137 -65
  61. openTEPES/openTEPES_InputData.py +419 -234
  62. openTEPES/openTEPES_Main.py +2 -2
  63. openTEPES/openTEPES_ModelFormulation.py +469 -180
  64. openTEPES/openTEPES_OutputResults.py +305 -223
  65. openTEPES/openTEPES_ProblemSolving.py +68 -56
  66. {opentepes-4.18.3.dist-info → openTEPES-4.18.5.dist-info}/METADATA +17 -18
  67. {opentepes-4.18.3.dist-info → openTEPES-4.18.5.dist-info}/RECORD +70 -23
  68. {opentepes-4.18.3.dist-info → openTEPES-4.18.5.dist-info}/WHEEL +1 -1
  69. {opentepes-4.18.3.dist-info → openTEPES-4.18.5.dist-info}/LICENSE +0 -0
  70. {opentepes-4.18.3.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) - January 27, 2025
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 = _path+f'/openTEPES_gurobi_{CaseName}_{p}_{sc}_{st}.log'
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' ] = _path+f'/openTEPES_gurobi_{CaseName}_{p}_{sc}_{st}.log'
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' ] = _path+f'/openTEPES_gurobi_'+CaseName+'.ilp' # should be uncommented to show results of IIS
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 = _path+f'/openTEPES_cplex_{CaseName}_{p}_{sc}_{st}.log'
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' ] = _path+f'/openTEPES_cplex_{CaseName}_{p}_{sc}_{st}.log'
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,42 +52,46 @@ 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 = _path+f'/openTEPES_highs_{CaseName}_{p}_{sc}_{st}.log'
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' ] = _path+f'/openTEPES_highs_{CaseName}_{p}_{sc}_{st}.log'
59
- Solver.options['solver' ] = 'simplex'
58
+ Solver.options['log_file' ] = f'{_path}/openTEPES_highs_{CaseName}_{p}_{sc}_{st}.log'
59
+ Solver.options['solver' ] = 'choose'
60
+ Solver.options['simplex_strategy' ] = 3
60
61
  Solver.options['run_crossover' ] = 'on'
61
62
  Solver.options['mip_rel_gap' ] = 0.01
63
+ Solver.options['parallel' ] = 'on'
62
64
  Solver.options['threads' ] = int((psutil.cpu_count(logical=True) + psutil.cpu_count(logical=False))/2)
63
65
  Solver.options['time_limit' ] = 36000
64
66
  Solver.options['simplex_iteration_limit'] = 36000000
65
67
  if SolverName == 'gams' or SolverName == 'GAMS':
68
+ FileName = f'{_path}/openTEPES_gams_{CaseName}_{p}_{sc}_{st}.log'
66
69
  solver_options = {
67
- '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 ; '
68
71
  'option SysOut = off ;',
69
72
  'option LP = cplex ; option MIP = cplex ;',
70
73
  'option ResLim = 36000 ; option IterLim = 36000000 ;',
71
74
  'option Threads = '+str(int((psutil.cpu_count(logical=True) + psutil.cpu_count(logical=False))/2))+' ;'
72
75
  }
73
76
 
74
- idx = 0
77
+ nUnfixedVars = 0
75
78
  for var in OptModel.component_data_objects(pyo.Var, active=True, descend_into=True):
76
- if not var.is_continuous():
77
- idx += 1
78
- if idx == 0:
79
+ if not var.is_continuous() and not var.is_fixed() and var.value != None:
80
+ nUnfixedVars += 1
81
+
82
+ if nUnfixedVars == 0:
79
83
  OptModel.dual = Suffix(direction=Suffix.IMPORT_EXPORT)
80
84
  OptModel.rc = Suffix(direction=Suffix.IMPORT_EXPORT)
81
85
 
82
- if SolverName == 'gams':
83
- 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)
84
88
  else:
85
89
  SolverResults = Solver.solve(OptModel, tee=True, report_timing=True)
86
90
 
87
91
  print('Termination condition: ', SolverResults.solver.termination_condition)
88
92
  if SolverResults.solver.termination_condition == TerminationCondition.infeasible or SolverResults.solver.termination_condition == TerminationCondition.maxTimeLimit or SolverResults.solver.termination_condition == TerminationCondition.infeasible.maxIterations:
89
93
  log_infeasible_constraints(OptModel, log_expression=True, log_variables=True)
90
- logging.basicConfig(filename=_path+f'/openTEPES_infeasibilities_{CaseName}_{p}_{sc}_{st}.log', level=logging.INFO)
94
+ logging.basicConfig(filename=f'{_path}/openTEPES_infeasibilities_{CaseName}_{p}_{sc}_{st}.log', level=logging.INFO)
91
95
  raise ValueError('Problem infeasible')
92
96
  SolverResults.write() # summary of the solver results
93
97
 
@@ -96,36 +100,42 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
96
100
  # binary operation decisions are fixed to their optimal values
97
101
  # if NoRepetition == 1, all variables are fixed
98
102
  # if NoRepetition == 0, only the variables of the current period and scenario are fixed
99
- idx = 0
103
+ nUnfixedVars = 0
100
104
  if mTEPES.NoRepetition == 1:
101
105
  for var in OptModel.component_data_objects(pyo.Var, active=True, descend_into=True):
102
- 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:
103
107
  var.fixed = True # fix the current value
104
- idx += 1
108
+ nUnfixedVars += 1
105
109
  else:
106
110
  for var in OptModel.component_data_objects(pyo.Var, active=True, descend_into=True):
107
- 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:
108
112
  var.fixed = True # fix the current value
109
- idx += 1
113
+ nUnfixedVars += 1
110
114
 
111
115
  # continuous investment decisions are fixed to their optimal values
112
- for gc in mTEPES.gc:
113
- OptModel.vGenerationInvest[p,gc].fix( OptModel.vGenerationInvest[p,gc ]())
116
+ for eb in mTEPES.eb:
117
+ if (p,eb) in mTEPES.peb:
118
+ OptModel.vGenerationInvest[p,eb].fix( OptModel.vGenerationInvest[p,eb ]())
114
119
  for gd in mTEPES.gd:
115
- OptModel.vGenerationRetire[p,gd].fix( OptModel.vGenerationRetire[p,gd ]())
120
+ if (p,gd) in mTEPES.pgd:
121
+ OptModel.vGenerationRetire[p,gd].fix( OptModel.vGenerationRetire[p,gd ]())
116
122
  if mTEPES.pIndHydroTopology == 1:
117
123
  for rc in mTEPES.rn:
118
- OptModel.vReservoirInvest[p,rc].fix( OptModel.vReservoirInvest [p,rc ]())
124
+ if (p,rc) in mTEPES.prc:
125
+ OptModel.vReservoirInvest[p,rc].fix( OptModel.vReservoirInvest [p,rc ]())
119
126
  for ni,nf,cc in mTEPES.lc:
120
- OptModel.vNetworkInvest[p,ni,nf,cc].fix( OptModel.vNetworkInvest [p,ni,nf,cc]())
127
+ if (p,ni,nf,cc) in mTEPES.plc:
128
+ OptModel.vNetworkInvest[p,ni,nf,cc].fix( OptModel.vNetworkInvest [p,ni,nf,cc]())
121
129
  if mTEPES.pIndHydrogen == 1:
122
130
  for ni,nf,cc in mTEPES.pc:
123
- OptModel.vH2PipeInvest [p,ni,nf,cc].fix(OptModel.vH2PipeInvest [p,ni,nf,cc]())
131
+ if (p,ni,nf,cc) in mTEPES.ppc:
132
+ OptModel.vH2PipeInvest [p,ni,nf,cc].fix(OptModel.vH2PipeInvest [p,ni,nf,cc]())
124
133
  if mTEPES.pIndHeat == 1:
125
134
  for ni,nf,cc in mTEPES.hc:
126
- OptModel.vHeatPipeInvest[p,ni,nf,cc].fix(OptModel.vHeatPipeInvest [p,ni,nf,cc]())
135
+ if (p,ni,nf,cc) in mTEPES.phc:
136
+ OptModel.vHeatPipeInvest[p,ni,nf,cc].fix(OptModel.vHeatPipeInvest [p,ni,nf,cc]())
127
137
 
128
- if idx > 0:
138
+ if nUnfixedVars > 0:
129
139
  OptModel.dual = Suffix(direction=Suffix.IMPORT_EXPORT)
130
140
  OptModel.rc = Suffix(direction=Suffix.IMPORT_EXPORT)
131
141
  SolverResults = Solver.solve(OptModel, tee=True, report_timing=True)
@@ -159,43 +169,45 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
159
169
  if mTEPES.NoRepetition == 1:
160
170
  for pp,scc in mTEPES.ps:
161
171
  print (f'***** Period: {pp}, Scenario: {scc}, Stage: {st} ******')
162
- print (' Total generation investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pGenInvestCost [gc ] * OptModel.vGenerationInvest[pp,gc ]() for gc in mTEPES.gc if (pp,gc) in mTEPES.pgc))
163
- 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))
164
- if mTEPES.pIndHydroTopology == 1 and len(mTEPES.rn):
165
- 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))
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) +
173
+ sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pGenInvestCost [bc ] * OptModel.vGenerationInvestHeat[pp,bc ]() for bc in mTEPES.bc if (pp,bc) in mTEPES.pbc))
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))
175
+ if mTEPES.pIndHydroTopology == 1 and mTEPES.rn:
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))
166
177
  else:
167
178
  print(' Total reservoir investment cost [MEUR] ', 0.0)
168
- 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))
169
- if mTEPES.pIndHydrogen == 1 and len(mTEPES.pc):
170
- 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))
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))
180
+ if mTEPES.pIndHydrogen == 1 and mTEPES.pc:
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))
171
182
  else:
172
183
  print(' Total H2 pipe investment cost [MEUR] ', 0.0)
173
- if mTEPES.pIndHeat == 1 and len(mTEPES.hc):
174
- 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
+ if mTEPES.pIndHeat == 1 and mTEPES.hc:
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))
175
186
  else:
176
187
  print(' Total heat pipe investment cost [MEUR] ', 0.0)
177
- print (' Total generation operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalGCost [pp,scc,n ]() for n in mTEPES.n ))
178
- print (' Total consumption operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalCCost [pp,scc,n ]() for n in mTEPES.n ))
179
- print (' Total emission cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalECost [pp,scc,n ]() for n in mTEPES.n ))
180
- print (' Total reliability cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalRCost [pp,scc,n ]() for n in mTEPES.n ))
188
+ print (' Total generation operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalGCost [pp,scc,n ]() for n in mTEPES.n ))
189
+ print (' Total consumption operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalCCost [pp,scc,n ]() for n in mTEPES.n ))
190
+ print (' Total emission cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalECost [pp,scc,n ]() for n in mTEPES.n ))
191
+ print (' Total reliability cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalRCost [pp,scc,n ]() for n in mTEPES.n ))
181
192
  else:
182
193
  print (f'***** Period: {p}, Scenario: {sc}, Stage: {st} ******')
183
- print (' Total generation investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pGenInvestCost [gc ] * OptModel.vGenerationInvest[p,gc ]() for gc in mTEPES.gc if (p,gc) in mTEPES.pgc))
184
- 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))
185
- if mTEPES.pIndHydroTopology == 1 and len(mTEPES.rn):
186
- 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))
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) +
195
+ sum(mTEPES.pDiscountedWeight[p] * mTEPES.pGenInvestCost [bc ] * OptModel.vGenerationInvestHeat[p,bc ]() for bc in mTEPES.bc if (p,bc) in mTEPES.pbc))
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))
197
+ if mTEPES.pIndHydroTopology == 1 and mTEPES.rn:
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))
187
199
  else:
188
200
  print (' Total reservoir investment cost [MEUR] ', 0.0)
189
- 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))
190
- if mTEPES.pIndHydrogen == 1 and len(mTEPES.pc):
191
- 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))
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))
202
+ if mTEPES.pIndHydrogen == 1 and mTEPES.pc:
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))
192
204
  else:
193
205
  print (' Total H2 pipe investment cost [MEUR] ', 0.0)
194
- if mTEPES.pIndHeat == 1 and len(mTEPES.hc):
195
- 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
+ if mTEPES.pIndHeat == 1 and mTEPES.hc:
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))
196
208
  else:
197
209
  print (' Total heat pipe investment cost [MEUR] ', 0.0)
198
- print (' Total generation operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalGCost [p,sc,n ]() for n in mTEPES.n ))
199
- print (' Total consumption operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalCCost [p,sc,n ]() for n in mTEPES.n ))
200
- print (' Total emission cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalECost [p,sc,n ]() for n in mTEPES.n ))
201
- print (' Total reliability cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalRCost [p,sc,n ]() for n in mTEPES.n ))
210
+ print (' Total generation operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalGCost [p,sc,n ]() for n in mTEPES.n ))
211
+ print (' Total consumption operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalCCost [p,sc,n ]() for n in mTEPES.n ))
212
+ print (' Total emission cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalECost [p,sc,n ]() for n in mTEPES.n ))
213
+ print (' Total reliability cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalRCost [p,sc,n ]() for n in mTEPES.n ))
@@ -1,8 +1,8 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.1
2
2
  Name: openTEPES
3
- Version: 4.18.3
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://pascua.iit.comillas.edu/aramos/openTEPES/index.html
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:: https://pascua.iit.comillas.edu/aramos/openTEPES.png
29
- :target: https://pascua.iit.comillas.edu/aramos/openTEPES/index.html
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
 
@@ -63,11 +63,13 @@ Requires-Dist: dill>=0.3.8
63
63
 
64
64
  The **openTEPES** model has been developed at the `Instituto de Investigación Tecnológica (IIT) <https://www.iit.comillas.edu/index.php.en>`_ of the `Universidad Pontificia Comillas <https://www.comillas.edu/en/>`_.
65
65
 
66
- The **openTEPES** model presents a decision support system for defining the **integrated generation, storage, and transmission resource planning** (IRP, GEP+SEP+TEP) of a **large-scale electric system** at a tactical level (i.e., time horizons of 10-20 years),
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 `open energy system modelling toolbox <https://africaenergymodels.net/>`_, which is a suite of open and linked state-of-the-art open-source energy system models for 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)
@@ -146,10 +154,10 @@ Miniconda (recommended)
146
154
  2. **Packages and Solver**:
147
155
 
148
156
  1. Launch a new Anaconda prompt (or terminal in any IDE)
149
- 2. The `HiGHS 1.7.2 <https://ergo-code.github.io/HiGHS/dev/interfaces/python/#python-getting-started>`_ is our recommendation if you want a free and open-source solver.
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>`_ and see the `Tips <#tips>`_.
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=PuLMxCWXTuXja-37mg32JjEBhTtCOXxynRhR9tbupTg,832
1
+ openTEPES/__init__.py,sha256=0LrESaXoSN5ntta3lWySc71R8nXHjJg0CqsW2WtGuxo,832
2
2
  openTEPES/openTEPES.mapbox_token,sha256=xsXNkwGp2vzXqQy2zVkyLhhNcNWniK2BMeOFpc5SZHI,93
3
- openTEPES/openTEPES.py,sha256=LLzQlfp5VWwQaFTfG_-y-LC9IuA-qzIGMRhaAjhi0EM,21143
4
- openTEPES/openTEPES_InputData.py,sha256=blUzjw4zTp5SciPlGDGKuwoA_PzqkY4u5YY6WFDDiHE,213218
5
- openTEPES/openTEPES_Main.py,sha256=wWbl_KAYNzOhLtYqQR-UQwZ4l7hJvZzojhn3aSKBmIQ,39916
6
- openTEPES/openTEPES_ModelFormulation.py,sha256=mCyvXtiwNZ8ixsFXV7dGV9EeME1ZEjnHwrlmHOZ7CXg,117660
7
- openTEPES/openTEPES_OutputResults.py,sha256=lifyQkf2EO5BIvnyVOdNtNqoHa57TteY7hwgxia7lFU,211055
8
- openTEPES/openTEPES_ProblemSolving.py,sha256=zKic5bdkge5X4VCsPrDR7owZAPepupWZDhNVvzWBUuQ,14736
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=eVY_4Mu1PTkNbvzIcqbYbpvT0rloVrphTB048YYDyvA,60
222
- openTEPES/RTS-GMLC_6y/oT_Dict_Area_RTS-GMLC_6y.csv,sha256=6l13IVxPq4HJh6apld5lNtUPMerRRMgfK7odZxCpCb8,26
223
- openTEPES/RTS-GMLC_6y/oT_Dict_Circuit_RTS-GMLC_6y.csv,sha256=YudHKDVQ2bpMRufOHYttfppzQEaqi2d3vRGmxTuMFdc,28
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=rON9ZbWsiGauhkOIgBS3CDQosACOkKkJoORYT_fCGoc,15
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=7bnlSu5HfA1ch_58touhcvhmrCLOEjjWhH7f5G8tONw,1251
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=9sUtX_OUST0EMWbhQG2bh7q4_CN0zrELH-ImI5OCAV4,16
231
- openTEPES/RTS-GMLC_6y/oT_Dict_Scenario_RTS-GMLC_6y.csv,sha256=2ofsWknL6_xojAEk9w_ntKDc_iRFh1tY3MKWyKGlKBE,14
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=1xK85kRhPuVmBJUjdT5jxma6pft_aX3AQ4RsJyU1kLs,25
234
- openTEPES/RTS-GMLC_6y/oT_Dict_Technology_RTS-GMLC_6y.csv,sha256=OWIqvZzabgF1OxfFkk7tSRf8hRjdGUZBF7yMz7f8g9s,66
235
- openTEPES/RTS-GMLC_6y/oT_Dict_ZoneToArea_RTS-GMLC_6y.csv,sha256=GAxPRWF3ZLQMYrZTLOxQpJq0EnLQBxG05HDL-P3GJUE,325
236
- openTEPES/RTS-GMLC_6y/oT_Dict_Zone_RTS-GMLC_6y.csv,sha256=qdYPgz7RLrL4A2iiNEJ5pkXMPFpwIeLK5QOyAqJ11oQ,173
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
- opentepes-4.18.3.dist-info/entry_points.txt,sha256=gNNPrDaTsRuRJXI1FLNgqMX1CiJ45bEp1dEDH7ZB8Oc,49
339
- opentepes-4.18.3.dist-info/LICENSE,sha256=4O7bphXVzRuYavtsWzpLGuM3E-fp3HTRna7F4yIfnS4,35184
340
- opentepes-4.18.3.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
341
- opentepes-4.18.3.dist-info/METADATA,sha256=zxBf3NCfvcib0pJoHWv-Kg8bPMWiANOhW0qfo_odYiA,18389
342
- opentepes-4.18.3.dist-info/RECORD,,
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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: flit 3.10.1
2
+ Generator: flit 3.6.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any