Skip to content

Conversation

@kbrunik
Copy link
Collaborator

@kbrunik kbrunik commented Jan 14, 2026

Arps Decline Curve Modeling

This feature add is to make it so it's possible to use the Arps decline curves described in Tang et al. when simulating natural geologic hydrogen production.

The default behavior now for natural geologic hydrogen if use_arps_decline_curve is False is a linear decline.

When use_arps_decline_curve is True a user can specify their own decline parameters 'Di' and 'b' or they can use one of the default curves based on the "Bakken", "Eagle Ford" or "Permian" shale wells that are documented in Figure 7 in Tang et al..

One limitation of this model is more fundamental to H2I is that the "simulation_life" is a single year. This issue is further explained in #475.

Section 1: Type of Contribution

  • Feature Enhancement
    • Framework
    • New Model
    • Updated Model
    • Tools/Utilities
    • Other (please describe):
  • Bug Fix
  • Documentation Update
  • CI Changes
  • Other (please describe):

Section 2: Draft PR Checklist

  • Open draft PR
  • Describe the feature that will be added
  • Fill out TODO list steps
  • Describe requested feedback from reviewers on draft PR
  • Complete Section 7: New Model Checklist (if applicable)

TODO:

  • Consider how to look at lifetime decline since simulation length is 8760 (currently just taking the first 8760)

Type of Reviewer Feedback Requested (on Draft PR)

Structural feedback:

Implementation feedback:

Other feedback:

Section 3: General PR Checklist

  • PR description thoroughly describes the new feature, bug fix, etc.
  • Added tests for new functionality or bug fixes
  • Tests pass (If not, and this is expected, please elaborate in the Section 6: Test Results)
  • Documentation
    • Docstrings are up-to-date
    • Related docs/ files are up-to-date, or added when necessary
    • Documentation has been rebuilt successfully
    • Examples have been updated (if applicable)
  • CHANGELOG.md has been updated to describe the changes made in this PR

Section 3: Related Issues

#475 - new issue created by this PR.

Section 4: Impacted Areas of the Software

Section 4.1: New Files

  • No new files.

Section 4.2: Modified Files

  • geologic_hydrogen.md: Added information on how to use decline curve models.
  • 04_geo_h2/
    • run_geo_h2.py: Updated example to include plot of wellhead gas flow over the first year.
    • tech_config_natural.yaml: Updated natural geologic hydrogen well to include parameters for decline curve modeling and initial ramp up period.
  • test/test_all_examples.py: Updated test values because hydrogen production rate from subsurface increased with new Arps decline modeling.
  • h2integrate/converters/hydrogen/geologic/test/test_geologic_hydrogen.py: Updated test values because hydrogen production rate from subsurface increased with new Arps decline modeling.
  • h2integrate/converters/hydrogen/geologic/simple_natural_geoh2.py
    • NaturalGeoH2PerformanceConfig: Updated to include gas flow density, ramp up attributes and arps decline curve attributes.
    • setup: Added inputs for new attributes from NaturalGeoH2PerformanceConfig
    • arps_decline_curve_fit: Added method to model a decline in hydrogen production according to the Arps model.
    • compute: Updated to be able to have a ramp up rate for well. Updated gas production decline over time, default behavior is a linear decline and optional Arps modeling can be used.

Section 5: Additional Supporting Information

Section 6: Test Results, if applicable

Section 7 (Optional): New Model Checklist

  • Model Structure:
    • Follows established naming conventions outlined in docs/developer_guide/coding_guidelines.md
    • Used attrs class to define the Config to load in attributes for the model
      • If applicable: inherit from BaseConfig or CostModelBaseConfig
    • Added: initialize() method, setup() method, compute() method
      • If applicable: inherit from CostModelBaseClass
  • Integration: Model has been properly integrated into H2Integrate
    • Added to supported_models.py
    • If a new commodity_type is added, update create_financial_model in h2integrate_model.py
  • Tests: Unit tests have been added for the new model
    • Pytest-style unit tests
    • Unit tests are in a "test" folder within the folder a new model was added to
    • If applicable add integration tests
  • Example: If applicable, a working example demonstrating the new model has been created
    • Input file comments
    • Run file comments
    • Example has been tested and runs successfully in test_all_examples.py
  • Documentation:
    • Write docstrings using the Google style
    • Model added to the main models list in docs/user_guide/model_overview.md
      • Model documentation page added to the appropriate docs/ section
      • <model_name>.md is added to the _toc.yml

@kbrunik kbrunik added the geoh2 label Jan 14, 2026
@kbrunik kbrunik requested a review from jmartin4nrel January 14, 2026 23:36
@kbrunik kbrunik added the needs modifications This PR has been reviewed, at least partially, and is ready for PR author response label Jan 14, 2026
Copy link
Collaborator

@jmartin4nrel jmartin4nrel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Everything LOOKs right at first glance... however, when I add a couple lines to the example script to look at the hydrogen_out profile, it looks like this...
image
Not the curve we're looking for, but idk why. It would be good to add a couple lines on the example script (04_geo_h2) to show both this plot and the year-of-year decline curve and make sure they're what we expect

initial_wellhead_flow: 4000
gas_flow_density: 0.1
ramp_up_time_months: 6 #months
percent_increase_during_rampup: 0.05
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe a terminology discussion that should happen in a standup meeting: when I say something is a "percent", then 5 percent goes in as 5., it doesn't go in as 0.05 - I would call it a "fraction" in that case

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated to be a percent

def arps_decline_curve_fit(self, t, qi, Di, b):
"""Arps decline model.
Relevant literature: https://doi.org/10.1016/j.jngse.2021.103818
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

May be coming in the final PR, but I would put in first author name and brief description of what they did, plus page/equation number of the equations we used and mention of tables/SI we used to make the fits.

@kbrunik kbrunik marked this pull request as ready for review January 27, 2026 16:30
@kbrunik kbrunik requested a review from jmartin4nrel January 27, 2026 16:30
@kbrunik kbrunik added ready for review This PR is ready for input from folks and removed needs modifications This PR has been reviewed, at least partially, and is ready for PR author response labels Jan 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

geoh2 ready for review This PR is ready for input from folks

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants