Conversation
…ve with update to main)
There was a problem hiding this comment.
We should probably recreate Fig29. for EGS technical potential since the supply curve is updated? Or since reV supply curves for geohydro are forthcoming so we could update it for both technologies together later.
There was a problem hiding this comment.
Good point. I took a first pass at recreating the EGS portion and got the following:
The map looks pretty different from what's in the docs, and the total supply curve capacity here (~13 TW) is lower than the ~17 GW of near-field + deep EGS listed in Table 6. This might be because the original map shows the full technical potential whereas this one shows what goes into ReEDS after picking the best resources at each depth. Do you know if that's the case or if something else if going on here?
As for hydrothermal I think we might consider dropping that figure for now since it isn't supported by the model and then adding it back in once we get the updated reV data.
There was a problem hiding this comment.
This is very handy!
There was a problem hiding this comment.
Since the parser arguments have been modified we'll need to update README.md - specifically setup for reV supply curves, running hourlize sections.
There was a problem hiding this comment.
Updated. I also did a broader cleanup of a lot of the stale config settings. Take a look and let me know what you think here.
patrickbrown4
left a comment
There was a problem hiding this comment.
Thanks Brian and sorry for the late followup.
- I updated
input_diff_plots.pyfor the new CF and supply-curve formats; now it works for everything.- Here are the results for reference access: 20260908 - supply curves.pptx. The main thing to know is that reference-access siting for offshore wind removes a bunch of sites. Unclear if it's on the basis of depth or distance from shore (my guess is depth since it's not a uniform distance); we should confirm with the reV team to make sure we understand the reasoning.
- I tried running the reference case but forgot it won't work until the new offshore wind profiles are uploaded to Zenodo. Let me know if it's helpful to talk through any of that. Once it's done I'll retry the run and then approve.
- Let's rerun
input_diff_plots.pyafter the offshore wind profiles are uploaded just to double check.
- Let's rerun
- I'm pretty sure most of the differences in the compare report come from different representative periods, but it'd be nice to double check if not too much trouble (if helpful, I have the rep periods for a recent main-branch run at
/projects/reedsweto/pbrown/github/ReEDS/inputs/temporal/period_szn_user_v20260911_mainK0_USA_defaults.csv; can copy these and then setGSw_HourlyClusterAlgorithm = user_v20260911_mainK0_USA_defaults).
| {numref}`geothermal-technical-resource-potential` lists the technical resource potential for the different geothermal categories. | ||
|
|
||
| ```{table} Technical Resource Potential (GW) | ||
| :name: technical-resource-potential | ||
| :name: geothermal-technical-resource-potential | ||
| | **Resource Class** | Reservoir Temperature **(°C)** | **Hydrothermal** | **Near-Field EGS** | **Deep EGS** | | ||
| |:------------------:|:------------------------------:|:----------------:|:------------------:|:------------:| | ||
| | Class 1 | \> 325 | \- | 0.2 | 7.3 | | ||
| | Class 2 | 300–325 | 2.2 | 0.2 | 35 | | ||
| | Class 3 | 275–300 | 1.2 | 0.1 | 177 | | ||
| | Class 4 | 250–275 | 0.7 | 0.1 | 1696 | | ||
| | Class 5 | 225–250 | 0.2 | 0.1 | 4633 | | ||
| | Class 6 | 200–225 | 0.9 | 0.2 | 6467 | | ||
| | Class 7 | 175–200 | 12 | 0.3 | 3234 | | ||
| | Class 8 | 150–175 | 342 | 0.3 | \- | | ||
| | Class 9 | 125–150 | 2823 | 0.03 | \- | | ||
| | Class 10 | \<125 | 699 | \- | \- | | ||
| | Total | | 3881 | 1.4 | 16249 | | ||
| | Class 1 | \> 325 | \- | 0.2 | 544 | | ||
| | Class 2 | 300–325 | 1.8 | 0.2 | 18 | | ||
| | Class 3 | 275–300 | 9.3 | 1.3 | \- | | ||
| | Class 4 | 250–275 | 0.7 | 8.3 | \- | | ||
| | Class 5 | 225–250 | 1.1 | 74 | 1 | | ||
| | Class 6 | 200–225 | 2.4 | 320 | 169 | | ||
| | Class 7 | 175–200 | 0.2 | 709 | 3509 | | ||
| | Class 8 | 150–175 | 2.6 | 996 | 8012 | | ||
| | Class 9 | 125–150 | 1.1 | 1268 | 686 | | ||
| | Class 10 | \<125 | 4.7 | \- | 8 | | ||
| | Total | | 23.9 | 3377 | 12947 | | ||
| ``` |
There was a problem hiding this comment.
I think it'd be ok to remove this table since 1) we don't show similar tables for wind/solar and 2) it's hard to remember to keep it up to date, but your call since you've already updated it.
(Ideally it might be nice to have a jupyter notebook with questions like "What's the technical potential of PV/wind/geothermal" and little code blocks that pull it from the repo and display it, both to illustrate where to find things and to automate the table creation, but that'd be a different PR obviously. (And it might still be hard to remember to run it.))
| * on the nrelnas01 device at `\\nrelnas01\ReEDS\Supply_Curve_Data` | ||
| * on Eagle at `/shared-projects/reeds/Supply_Curve_Data` | ||
| * on Kestrel at `/kfs2/shared-projects/reeds/Supply_Curve_Data` | ||
| The `srun_template.sh` file is used to govern HPC submission settings. Update with your allocation, email, and any other slurm specifications before submitting jobs. There is also a command line argument to via `run_hourlize.py` for running jobs using the debug partition. |
There was a problem hiding this comment.
It seems like we could drop this copy and just use reeds/hpc/srun_template.sh for everything (and avoid having two files with the same name), but your call.
| | scale_factor | Factor used to scale capacity-factor values when writing hourly profiles | 1e4 | | ||
| | state_abbrev | Path to the state-abbreviation file | '{hourlize_path}/inputs/resource/state_abbrev.csv' | | ||
| | subsetvars | Columns in `rev_paths_file` used to select the appropriate reV path | ['tech', 'access_case'] | | ||
| | subtract_exog | Legacy flag passed to supply-curve output processing; currently has no effect | false | |
There was a problem hiding this comment.
I'd just remove this row (and the argument)
| #%% copy reV folders | ||
| copy_rev_folders.main(cf.rev_paths_file, [cf.tech], overwrite=True) |
There was a problem hiding this comment.
I might be misinterpreting but does this mean that every time someone runs hourlize (even just for testing), it will overwrite shared files that R2X depends on? That seems risky to me. Could we make it controlled by a switch that is off by default?
| elif args.mode == "resource": | ||
| setup_resource(args) | ||
| else: | ||
| print("Unsupported method for hourlize") |
There was a problem hiding this comment.
I would print the mode and raise an error
| print("Unsupported method for hourlize") | |
| raise ValueError(f"Unsupported method for hourlize: {args.mode}") |

Summary
Updates the offshore wind and enhanced geothermal (EGS) supply curves to their 2025 versions and addresses bugs in hourlize.
Remaining to-do items:
Technical details
rev_paths.csvto include the latest paths for all technologies.copy_rev_folders.pywith a function to automate copying the reV data using rsync when an hourlize run is launched.rev_paths.csvfile, with the option to subset via arguments torun_hourlize.pydocs/source/plotting_scripts; this script relies on the existinginput_plots.map_supplycurvesfunction with a few small tweaks.Issues resolved
Addresses hourlize portion of #158 .
Validation, testing, and comparison report(s)
Total capacity supply curve capacity before and after (see updated figures in the docs for the maps):
All three access cases successfully solve. Changes in capacity vary depending on the case but are generally < 40 GW.
Reference:

Open:

Limited:

Compare cases reports:
Checklist for author
Details to double-check
d_objective.gms, they are included inobjective_function_params.yamlfor completeness checkinghourlize/resource.pywas rerun to regenerate the existing/prescribed VRE capacity dataGeneral information to guide review
Did you use LLM tools (chatbot or copilot) in the preparation of this PR? If so, describe how
I used copilot to help draft initial versions of the
copy_rev_folders.pyandsupply_curve_plots.pyscripts, which I subsequently modified and tested on my own.Tag points of contact here if you would like additional review of the relevant parts of the model