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.

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:

  • Plot h2 output and verify it makes sense
  • Verify decline method makes sense with H2I paradigm (Arps decline curve modeling is per unit volume not mass)
  • Consider how to look at lifetime decline since simulation length is 8760 (currently just taking the first 8760)
  • Testing
  • Documentation

Type of Reviewer Feedback Requested (on Draft PR)

Structural feedback:

Implementation feedback:

Other feedback:
@jmartin4nrel it would be great to get your initial feedback on the method and implementation. I've added the arps_decline_curve_fit method directly to the NaturalGeoH2PerformanceModel class. Users are able to use the decline curve with predefined fits from data ("Permian", "Eagle_Ford", "Bakken"), select their own "Di" and "b", or not select anything and it will decline linearly.

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

Section 4: Impacted Areas of the Software

Section 4.1: New Files

  • path/to/file.extension
    • method1: What and why something was changed in one sentence or less.

Section 4.2: Modified Files

  • path/to/file.extension
    • method1: What and why something was changed in one sentence or less.

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

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

geoh2 needs modifications This PR has been reviewed, at least partially, and is ready for PR author response

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants