Reservoirs with storage levels below the top of conservation pool are treated like demand sites so that WEAP will not drain them unless to meet downstream demands, and to try to fill them up when there is surplus surface water. Where multiple reservoirs with the same demand priority exist, WEAP will try to fill them up to same level (as a % of the top of conservation pool), just as it will try to satisfy demand sites to the same percentage of their demand. Optionally, you can set a separate (higher) priority for filling the buffer pool storage.
In the first example, the river headflow is insufficient to meet the two demands. Therefore, the reservoirs will need to release water to satisfy the demands. Both reservoirs have a top of conservation pool (TOC) of 200, although their initial storages are different: 50 and 100, as shown. Both reservoirs have the same demand priority (99). Therefore, after allocating water, the goal will be to have both reservoirs finish with the same fraction of the top of conservation pool filled.
Since the demand is 130, and the available water is 160, there will be 30 remaining, after allocating to the demand sites. This 30 is split evenly between the two reservoirs-each will have 15. WEAP will solve first for the allocations to the demand sites, and second to fill up the reservoirs. Here is the LP formulation for the first:
Q1 = Add1 + Q2
Q2 = Add2 + Q3
Q3 = Q4 + Q5
Q5 = Q6 + Q7
Q4 = 80 C1
Q6 = 50 C2
S1 = 200 C3
S2 = 200 C4
S1 = 50 + Add1
S2 = 100 + Add2
C1 + E1 >= FC
C2 + E2 >= FC
Obj fn: FC - 0.2 E1 - 0.2 E2 - 0.2 E3 - 0.2 E4
Upper and lower bounds:
Q1 = 10
Q2 >= 0
C3 >= 0
Q4 >= 0
Q5 >= 0
Q6 >= 0
Q7 >= 0
Add1 >= -50
Add2 >= -100
0 <= S1 <= 200
0 <= S2 <= 200
0 <= C1 <= 1
0 <= C2 <= 1
0 <= C3 <= 1
0 <= C4 <= 1
0 <= E1 <= 0.0001
0 <= E2 <= 0.0001
0 <= E3 <= 0.0001
0 <= E4 <= 0.0001
0 <= FC <= 1
Where:
Add1 = addition to reservoir 1 storage (negative "additions" represent releases, which cannot exceed the initial storage)
Add2 = addition to reservoir 2 storage
S1 = final storage in reservoir 1
S2 = final storage in reservoir 1
C1 = D1 coverage
C2 = D2 coverage
C3 = Coverage for "demand" to fill reservoir 1 to top of conservation (TOC) pool
C4 = Coverage for "demand" to fill reservoir 2 to top of conservation (TOC) pool
E1 = D1 epsilon
E2 = D2 epsilon
E3 = Res 1 TOC epsilon
E4 = Res 2 TOC epsilon
FC = Final Coverage
Here is the solution:
Q1 = 10
Q2 = 30
Q3 = 130
Q4 = 80
Q5 = 50
Q6 = 50
Q7 = 0
Add1 = -20
Add2 = -100
S1 = 30
S2 = 0
C1 = C2 = FC = 1
C3 = C4 = 0
E1 = E2 = E3 = E4 = 0
Note that Reservoir 1 has storage of 30 while reservoir 2 has 0. This inequity will be rectified next. For the second LP iteration, to solve for equalizing the reservoir releases, here is the LP formulation:
Q1 = Add1 + Q2
Q2 = Add2 + Q3
Q3 = Q4 + Q5
Q5 = Q6 + Q7
Q4 = 80 C1
Q6 = 50 C2
S1 = 200 C3
S2 = 200 C4
S1 = 50 + Add1
S2 = 100 + Add2
C3 + E3 >= FC
C4 + E4 >= FC
Obj fn: FC - 0.2 E1 - 0.2 E2 - 0.2 E3 - 0.2 E4
Upper and lower bounds:
Q1 = 10
Q2 >= 0
C3 >= 0
Q4 = 80
Q5 >= 0
Q6 = 50
Q7 >= 0
Add1 >= -50
Add2 >= -100
0 <= S1 <= 200
0 <= S2 <= 200
C1 = 1
C2 = 1
0 <= C3 <= 1
0 <= C4 <= 1
0 <= E1 <= 0.0001
0 <= E2 <= 0.0001
0 <= E3 <= 0.0001
0 <= E4 <= 0.0001
0 <= FC <= 1
Here is the solution:
Q1 = 10
Q2 = 45
Q3 = 130
Q4 = 80
Q5 = 50
Q6 = 50
Q7 = 0
Add1 = -35
Add2 = -85
S1 = 15
S2 = 15
C1 = C2 = 1
C3 = C4 = 0.075
FC = 0.0751
E1 = E2 = 0
E3 = E4 = 0.0001
The second example is identical to the first, except that the two reservoirs are on different rivers. The river headflow is insufficient to meet the two demands. Therefore, the reservoirs will need to release water to satisfy the demands. Both reservoirs have a top of conservation pool (TOC) of 200, although their initial storages are different: 50 and 100, as shown. Both reservoirs have the same demand priority (99). Therefore, after allocating water, the goal will be to have both reservoirs finish with the same fraction of the top of conservation pool filled.
Since the demand is 130, and the available water is 160, there will be 30 remaining, after allocating to the demand sites. This 30 is split evenly between the two reservoirs-each will have 15. WEAP will solve first for the allocations to the demand sites, and second to fill up the reservoirs. Here is the LP formulation for the first:
Q1 = Add1 + Q8
Q2 = Add2 + Q9
Q3 = Q8 + Q9
Q3 = Q4 + Q5
Q5 = Q6 + Q7
Q6 = 50 C2
S1 = 200 C3
S2 = 200 C4
S1 = 50 + Add1
S2 = 100 + Add2
C1 + E1 >= FC
C2 + E2 >= FC
Obj fn: FC - 0.2 E1 - 0.2 E2 - 0.2 E3 - 0.2 E4
Upper and lower bounds:
Q1 = 5
Q2 = 5
C3 >= 0
Q4 >= 0
Q5 >= 0
Q6 >= 0
Q7 >= 0
Q8 >= 0
Q9 >= 0
Add1 >= -50
Add2 >= -100
0 <= S1 <= 200
0 <= S2 <= 200
0 <= C1 <= 1
0 <= C2 <= 1
0 <= C3 <= 1
0 <= C4 <= 1
0 <= E1 <= 0.0001
0 <= E2 <= 0.0001
0 <= E3 <= 0.0001
0 <= E4 <= 0.0001
0 <= FC <= 1
Where:
Add1 = addition to reservoir 1 storage (negative "additions" represent releases, which cannot exceed the initial storage)
Add2 = addition to reservoir 2 storage
S1 = final storage in reservoir 1
S2 = final storage in reservoir 1
C1 = D1 coverage
C2 = D2 coverage
C3 = Coverage for "demand" to fill reservoir 1 to top of conservation (TOC) pool
C4 = Coverage for "demand" to fill reservoir 2 to top of conservation (TOC) pool
E1 = D1 epsilon
E2 = D2 epsilon
E3 = Res 1 TOC epsilon
E4 = Res 2 TOC epsilon
FC = Final Coverage
Here is the solution:
Q1 = 5
Q2 = 5
Q3 = 130
Q4 = 80
Q5 = 50
Q6 = 50
Q7 = 0
Q8 = 25
Q9 = 105
Add1 = -20
Add2 = -100
S1 = 30
S2 = 0
C1 = C2 = FC = 1
C3 = C4 = 0
E1 = E2 = E3 = E4 = 0
Note that Reservoir 1 has storage of 30 while reservoir 2 has 0. This inequity will be rectified next. For the second LP iteration, to solve for equalizing the reservoir releases, here is the LP formulation:
Q1 = Add1 + Q8
Q2 = Add2 + Q9
Q3 = Q8 + Q9
Q3 = Q4 + Q5
Q4 = 80
Q5 = Q6 + Q7
Q6 = 50
S1 = 200 C3
S2 = 200 C4
S1 = 50 + Add1
S2 = 100 + Add2
C3 + E3 >= FC
C4 + E4 >= FC
Obj fn: FC - 0.2 E1 - 0.2 E2 - 0.2 E3 - 0.2 E4
Upper and lower bounds:
Q1 = 5
Q2 = 5
C3 >= 0
Q4 = 80
Q5 >= 0
Q6 = 50
Q7 >= 0
Q8 >= 0
Q9 >= 0
Add1 >= -50
Add2 >= -100
0 <= S1 <= 200
0 <= S2 <= 200
C1 = 1
C2 = 1
0 <= C3 <= 1
0 <= C4 <= 1
0 <= E1 <= 0.0001
0 <= E2 <= 0.0001
0 <= E3 <= 0.0001
0 <= E4 <= 0.0001
0 <= FC <= 1
Here is the solution:
Q1 = 5
Q2 = 5
Q3 = 130
Q4 = 80
Q5 = 50
Q6 = 50
Q7 = 0
Q8 = 40
Q9 = 90
Add1 = -35
Add2 = -85
S1 = 15
S2 = 15
C1 = C2 = 1
C3 = C4 = 0.075
FC = 0.0751
E1 = E2 = 0
E3 = E4 = 0.0001
Note that now both Reservoir 1 and Reservoir 2 have the same storage (15).
If the optional maximum hydraulic outflow (MHO) data value is set, WEAP will create extra constraints to handle it. When there is no maximum hydraulic outflow constraint, WEAP will never allow reservoir storage to exceed the top of conservation. However, if there is a maximum hydraulic outflow constraint, it is possible for the reservoir storage to exceed the top of conservation in timesteps where releases from the reservoir equal the maximum hydraulic outflow.
There are three cases that must be handled:
The outflow is less than MHO (MHO constraint is in place, but is not binding),
The outflow is equal to MHO but the reservoir is not completely full (MHO constraint is in place and is binding), or
The reservoir is completely full (storage = total storage) and could be overtopping with no maximum flow constraint (MHO constraint is not in place, but the outflow is not necessary greater than MHO).
To handle these non-linear constraints requires the use of two binary integer LP variables, Z1 and Z2. (A binary integer variable must either be 0 or 1.)
Z1 |
{ |
= 0 if the MHO constraint is not binding (outflow < MHO or Storage = Total Storage) |
= 1 if the MHO constraint is binding (outflow = MHO and Storage < Total Storage) | ||
Z2 |
{ |
= 0 if Storage < Total Storage |
= 1 if Storage = Total Storage |
Because the MHO constraint is not binding if Storage = Total Storage, Z1 and Z2 cannot both be 1 at the same time, although they can both be 0 at the same time. For the three cases above, the values of Z1 and Z2 are as follows:
Z1 = 0, Z2 = 0
Z1 = 1, Z2 = 0
Z1 = 0, Z2 = 1
Here are the LP constraints to implement the MHO constraint:
Q <= MHO * Z1 + 0.999 * MHO * (1-Z1) + TS * Z2
Q >= MHO * Z1
S <= 0.999 * TS * Z1 + TOC * (1-Z1) + (TS - TOC) * Z2
S >= TS * Z2
Z1 + Z2 <= 1
Where:
Q = reservoir outflow
MHO = maximum hydraulic outflow
TOC = top of conservation
TS = total storage (maximum possible storage in reservoir)
Here are how the constraints look for the three cases (substituting the appropriate values for Z1 and Z2):
Case 1 (Z1 = 0, Z2 = 0) The outflow is less than MHO:
Q <= 0.999 * MHO
Q >= 0
S <= TOC
S >= 0
0 + 0 <= 1
Case 2 (Z1 = 1, Z2 = 0) The outflow is equal to MHO but the reservoir is not completely full:
Q <= MHO
Q >= MHO
S <= 0.999 * TS
S >= 0
1 + 0 <= 1
Case 3 (Z1 = 0, Z2 = 1) The reservoir is completely full (storage = total storage), so there is maximum flow constraint (but the outflow is not necessary greater than MHO):
Q <= 0.999 * MHO + TS
Q >= 0
S <= TOC + (TS - TOC), which simplifies to S <= TS
S >= TS
0 + 1 <= 1