1- from pownet .core import ModelBuilder
2- from .manager import ReservoirManager
1+ """coupler.py: PowerWaterCoupler class to couple the power and water systems."""
32
4- import gurobipy as gp
3+ from .core import ModelBuilder
4+ from .reservoir .manager import ReservoirManager
55
6- from ..data_utils import get_unit_hour_from_varname
6+ import logging
7+
8+ logger = logging .getLogger (__name__ )
79
810
911class PowerWaterCoupler :
@@ -15,7 +17,21 @@ def __init__(
1517 mip_gap : float = 0.0001 ,
1618 timelimit : float = 600 ,
1719 log_to_console : bool = False ,
18- ):
20+ ) -> None :
21+ """
22+ Coupler class to couple the power and water systems.
23+
24+ Args:
25+ model_builder (ModelBuilder): ModelBuilder object to build the power system model.
26+ reservoir_manager (ReservoirManager): ReservoirManager object to manage the water system.
27+ solver (str): Solver to use for optimization. Default is "gurobi".
28+ mip_gap (float): MIP gap for optimization. Default is 0.0001.
29+ timelimit (float): Time limit for optimization in seconds. Default is 600.
30+ log_to_console (bool): Whether to log to console. Default is False.
31+
32+ Returns:
33+ None
34+ """
1935 self .model_builder = model_builder
2036 self .reservoir_manager = reservoir_manager
2137
@@ -38,7 +54,16 @@ def get_reop_iter(self):
3854 def reoperate (
3955 self ,
4056 step_k : int ,
41- ):
57+ ) -> None :
58+ """Reoperate the reservoirs based on the daily dispatch of the power system model.
59+ Note that we don't reoperate on the first day of the simulation period.
60+
61+ Args:
62+ step_k (int): Current step in the simulation.
63+
64+ Returns:
65+ None
66+ """
4267
4368 # Assume optimization is rolling horizon of 24 hours
4469 days_in_step = range (step_k , step_k + self .num_days_in_step )
@@ -47,8 +72,6 @@ def reoperate(
4772 reop_k = 0
4873
4974 while not reop_converge :
50- print (f"\n Reservoirs reoperation iteration { reop_k } " )
51-
5275 # --- PowNet returns the hydropower dispatch in hourly resolution across the simulation horizon
5376 hydropower_dispatch = {
5477 (unit , day ): 0
@@ -94,11 +117,11 @@ def reoperate(
94117 for day in days_in_step
95118 ):
96119 reop_converge = True
97- print (
120+ logger . info (
98121 f"PowNet: Day { step_k + 1 } - Reservoirs converged at iteration { reop_k } "
99122 )
100123
101- print ("Max deviation:" , max_deviation )
124+ logger . info ("Max deviation:" , max_deviation )
102125
103126 if reop_k > 50 :
104127 raise ValueError (
0 commit comments