-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhydro_notes.txt
85 lines (70 loc) · 4.88 KB
/
hydro_notes.txt
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
PROBLEM: Santa Ana 1 is infeasible:
(venv) switch-workstna:06_12_toy pehidalg$ switch solve --verbose --log-run --solver=cplex --solver-io=nl --solver-options-string="iisfind=1" --suffixes iis
...
Model was infeasible; irreducible infeasible set (IIS) returned by solver:
Enforce_Dispatch_Upper_Limit[5000000,105944]
Enforce_Hydro_Min_Flow[5000000,105944]
Debugging:
# Inserted this into switch_mod.solve just after results are loaded
from IPython import embed; embed()
# ... Printing the equations for the problem constraints..
In [23]: print(model.Enforce_Dispatch_Upper_Limit[5000000,105944].expr)
...: print(model.Enforce_Hydro_Min_Flow[5000000,105944].expr)
...:
DispatchGen[5000000,105944] - 0.95 * 0.0 <= 0.0
82.2096 <= DispatchGen[5000000,105944]
Looking at the input files, we see that plant id 5000000 ("Santa Ana 1") was built in 1900 and was given a 30 year lifetime, so it couldn't be simultaneously retired and maintaining a minimum level of output.
Solution:
Either filter out retired hydro plants, or change their max age to allow them to be operational over the study period. Data investigations follow..
Inspect old hydro plants.. how much capacity should potentially be retired (>100 years)
The oldest plant (Santa Ana 1) was built in 1900 and was still operating in 2016.
http://www.energy.ca.gov/almanac/renewables_data/hydro/
Less than 2% of hydro capacity is more than 100 years old, so including all of it that is
still registered as operational with EIA seems fine.
SELECT round(generation_plant_existing_and_planned.build_year,-1) as bld_decade,
SUM(capacity),
SUM(capacity) / (
SELECT sum(capacity) AS total_hydro_capacity
FROM generation_plant JOIN generation_plant_existing_and_planned USING(generation_plant_id) WHERE energy_source = 'Water'
) AS percent_of_hydro_cap
-- generation_plant_existing_and_planned.*, generation_plant.*
FROM generation_plant
JOIN generation_plant_existing_and_planned USING(generation_plant_id)
WHERE energy_source = 'Water'
GROUP BY bld_decade
ORDER BY bld_decade
;
Hydro lifetime considerations (blog): http://www.waterpowermagazine.com/features/featurelife-span-of-storage-dams
Hydro lifetime considerations (official report): https://www.irena.org/documentdownloads/publications/re_technologies_cost_analysis-hydropower.pdf
PROBLEM: BuildGen / Enforce_Hydro_Avg_Flow / Enforce_Dispatch_Upper_Limit are infeasible.
(venv) switch-workstna:06_12_toy pehidalg$ switch solve --verbose --log-run --solver=cplex --solver-io=nl --solver-options-string="iisfind=1" --suffixes iis
...
Model was infeasible; irreducible infeasible set (IIS) returned by solver:
BuildGen[5000161,1963]
Enforce_Hydro_Avg_Flow[5000161,2022_Summer_day]
Enforce_Dispatch_Upper_Limit[5000161,109548]
Enforce_Dispatch_Upper_Limit[5000161,109558]
Enforce_Dispatch_Upper_Limit[5000161,109564]
Enforce_Dispatch_Upper_Limit[5000161,109560]
Enforce_Dispatch_Upper_Limit[5000161,109546]
Enforce_Dispatch_Upper_Limit[5000161,109550]
Enforce_Dispatch_Upper_Limit[5000161,109566]
Enforce_Dispatch_Upper_Limit[5000161,109544]
Enforce_Dispatch_Upper_Limit[5000161,109556]
Enforce_Dispatch_Upper_Limit[5000161,109554]
Enforce_Dispatch_Upper_Limit[5000161,109552]
Enforce_Dispatch_Upper_Limit[5000161,109562]
DIAGNOSIS:
Looking at the data, we find that the average flow in that timeseries is equal to the installed capacity, but the installed capacity is derated to 0.95 based on average outage rates. Possible solutions: adjust hydro flow or derating values. Capacity ratings are problably reliable and shouldn't be adjusted..
DATA INSPECTION:
SELECT hydro_avg_flow_mw, capacity, hydro_avg_flow_mw/capacity as avg_cap_factor,
generation_plant_existing_and_planned.*, generation_plant.*
FROM generation_plant
JOIN generation_plant_existing_and_planned USING(generation_plant_id)
JOIN hydro_historical_monthly_capacity_factors USING(generation_plant_id)
WHERE hydro_avg_flow_mw/capacity >= 0.95
ORDER BY avg_cap_factor DESC;
101 hydro plants / months have average flows exceeding their derated capacity.
Reviewing the AMPL code, we found the model did not protect against this, but it did rely on zonal hydro aggregation, suggesting that maximum flow rates did not happen in enough plants in a zone simultaneously to trigger an infeasibility (since we never observed those in Switch-AMPL).
Applying the annual average forced outage rate to individual plants in every timeseries is a bit extreme and doesn't reflect the statistical behaviors of actual outages. Applying it to a large collection of plants seems more reasonable; if individual outages on plants are independent random events, then the outage rate would be nearly constant over a year given enough plants.
Solution: Cap flows at 0.95 of capacity, and aggregate hydro plants in the database. If climate change scenarios project zone-wide flooding conditions and cap factors > 0.95, then this can be interpretted as sending the excess water over spillways.