Skip to content

Releases: sintefmath/Fimbul.jl

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 16:45
42bfeb3

Fimbul v0.4.0

Diff since v0.3.6

Fimbul v0.4.0

Breaking changes

  • Fimbul now requires Jutul 0.5 and JutulDarcy 0.4, which are breaking releases. Cases return JutulDarcy objects, so code that uses them may need updates for the new JutulDarcy version.

New features

Magmatic intrusion case (magmatic_intrusion)

  • New high-enthalpy geothermal case with an ellipsoidal "magmatic intrusion", based on the production and reinjection scenarios of Yapparova et al. (2023). Uses the pressure–enthalpy formulation (H2OSystem), so the reservoir may contain liquid, vapor, two-phase and supercritical water.
  • The schedule has a natural-state period with no wells, followed by a production period with a producer at constant wellhead pressure and an optional cold-water injector. Wells are multisegment wells that are cased above the open interval. A natural-state result can be passed as initial_state to a production case.
  • Tensor mesh with uniform cells across the intrusion and the plume region above it, and geometrically growing cells towards the boundaries.
  • New example: examples/production/magmatic_intrusion_demo.jl.

Pressure–enthalpy formulation

  • set_reservoir_variable_defaults! for H2OSystem models accepts dh_max_abs to limit the absolute enthalpy change per Newton iteration (not limited by default).
  • add_thermal_to_model! for H2OSystem models now passes keyword arguments on to JutulDarcy. Previously, calls with keyword arguments silently bypassed the H2OSystem overload.

Improvements

  • H2OSystem: gravity uses a saturation-weighted face density, which varies continuously when a phase disappears in one of the cells. This avoids cycling Newton iterations close to the critical point.
  • H2OSystem: adapted to the reworked compositional fluxes in JutulDarcy 0.4.
  • Steam tables: supercritical states are labelled as liquid or vapor by the critical enthalpy, which removes a spurious two-phase band across the critical pressure. The SteamTablesH2O artifact has been updated accordingly.
  • New script for building the steam tables artifact with CoolProp: examples/pvt/build_steam_tables.jl.
  • Closed-loop wells (ags, btes, coaxial_bhe) can no longer be shut automatically, since shutting the supply or return gives a dead end.
  • coaxial_bhe: uses the total energy formulation, and the grout cells have a small fluid volume to avoid a singular mass balance.
  • ags: well sections are now connected also when the junction point lies on a cell face. With Jutul ≥ 0.5.3, the traced cells of the connected sections then do not share a cell, which made the case setup fail.

Compatibility

  • Requires Jutul ≥ 0.5.2 and JutulDarcy ≥ 0.4.0.

Merged pull requests:

  • High-enthalpy example case (#60) (@strene)
  • Bump version to v0.4.0 and add changelog (#62) (@strene)

v0.3.6

Choose a tag to compare

@github-actions github-actions released this 08 Oct 12:34
0b09c89

Fimbul v0.3.6

Diff since v0.3.5

Fimbu v0.3.6

New features

Pressure–enthalpy formulation for high-temperature geothermal systems

  • New single-component, two-phase (liquid/vapor) H₂O system, H2OSystem, using pressure and specific enthalpy as primary variables. This makes it possible to simulate phase transitions such as boiling and condensation in high-enthalpy reservoirs. Temperature, phase enthalpies and internal energy are computed as secondary variables from tabulated steam properties.
  • Steam tables are distributed as a lazy artifact and loaded with steam_tables_h2o. With the new CoolProp package extension, build_steam_tables_h2o can regenerate the tables, for example over a different pressure/enthalpy range.
  • New governing-equations section in the documentation describing the formulation.

High-temperature benchmarks

  • benchmark_ht_1d: 1D benchmark cases :a–:e from Weis et al. (2014), covering single-phase liquid, single-phase vapor and two-phase regimes, with optional vertical flow.
  • benchmark_ht_2d: 2D upper-crust magmatic fluid-source plume benchmarks (:single_phase_source, :two_phase_source).
  • HYDROTHERM reference solutions are distributed as a lazy artifact (HYDROTHERMBenchmarks).
  • New validation examples: examples/validation/validation_ht_1d.jl and examples/validation/validation_ht_2d.jl. Analytical examples moved from examples/analytical to examples/validation.

Plotting (GLMakie extension)

  • New phase-diagram plotting: plot_phase_diagram_contours(!), plot_reservoir_state_ph(!) and plot_reservoir_state_phase_diagram(!).

Improvements

  • coaxial_bhe: new hz_min keyword for vertical refinement near the well, and better default meshing. For vertical wells, perforation lengths are now taken from the cell dz, which avoids very short perforation segments in thin layers.
  • extruded_mesh: now works with single-point cell constraints and no longer fails on degenerate refinement distances.
  • Closed-loop BHE wells: avoid a singular grout system.
  • ftes: added a full docstring.
  • ags: fixed well coordinates.
  • Updated plotting and resolution in the doublet, EGS, AGS, ATES, BTES, FTES, coaxial BHE and Egg HT-ATES examples.

Compatibility

  • Requires Jutul ≥ 0.4.31 and JutulDarcy ≥ 0.3.12.
  • New dependencies: Artifacts, LazyArtifacts, DelimitedFiles. New weak dependency: CoolProp.

Merged pull requests:

v0.3.5

Choose a tag to compare

@github-actions github-actions released this 30 Apr 21:32
68c8ccc

Fimbul v0.3.5

Diff since v0.3.4

Fimbul v0.3.5

New features

Fractured Thermal Energy Storage (ftes)

  • New ftes case for simulating Fractured Thermal Energy Storage systems. The setup places one central injector surrounded by multiple producer wells, with horizontal fracture planes connecting them to enable thermal transport through tight rock. Supports configurable fracture density, orientation, and radius.
  • New example: examples/storage/ftes_demo.jl.

EGS improvements

  • The egs case now uses cut_mesh with polygonal fracture cuts (PolygonalSurface), allowing more general fracture geometries.
  • examples/production/egs_demo.jl now compares varying well spacing and effect of angled fractures

Coaxial BHE

  • New deep coaxial_bhe case, with option to control whether fluid is injected into the inner pipe or the outer annulus.
  • New example: examples/production/coaxial_bhe_demo.jl.

New utilities

  • get_well_neighborship: computes well cell connectivity for multi-branch wells. Used internally in egs and ftes.
  • scaled_rate: computes a volumetric flow rate scaled to a given fraction of the pore volume in a region of interest over a time duration.
  • Fracture utilities (src/cases/utils/fractures.jl): add_fractures and strike_dip_to_normal.

Merged pull requests:

v0.3.4

Choose a tag to compare

@github-actions github-actions released this 01 Apr 18:24
b661836

Fimbul v0.3.4

Diff since v0.3.3

Release Notes v0.3.4

Improvements

  • Reinjection Target: Updated all cases (ATES, BTES, geothermal doublet, EGS) to use the new simplified ReinjectionTarget constructor from JutulDarcy, which no longer requires a rate argument.

Bug Fixes

  • Removed stray println debug statement from AGS demo example.

Merged pull requests:

v0.3.3

Choose a tag to compare

@github-actions github-actions released this 02 Mar 20:20
2665e0c

Fimbul v0.3.3

Diff since v0.3.2

Release Notes v0.3.3

Bug Fixes

  • Convex Hull Algorithm: Fixed a termination issue in get_convex_hull where the algorithm could enter an infinite loop when the starting point was not revisited (e.g., due to collinear or degenerate point configurations). The algorithm now also terminates when a previously visited point is encountered.

Documentation

  • Minor text formatting improvements in the ATES demo example.

Merged pull requests:

  • Make sure convex hull algorithm terminates also when first point is not revisited (#37) (@strene)
  • Fix text formatting in ATES example (#38) (@strene)
  • Bump version (#39) (@strene)

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 17 Feb 20:36
2b0aecc

Fimbul v0.3.2

Diff since v0.3.1

Release Notes v0.3.2

New Features

  • Layered Reservoir Domains:
    • Added layered_reservoir_domain() for streamlined setup of layered geothermal reservoir domains with per-layer material properties.
    • Automatically expands scalar or per-layer properties (permeability, porosity, thermal conductivity, etc.) to all cells.

Improvements

  • Geometry Representation:
    • Switched from Vector{Tuple} to Matrix (2×N / 3×N) representation for all geometry and meshing operations, improving consistency and performance.
  • Case Setup:
    • Refactored geothermal_doublet(), ags(), and egs() to use the new layered_reservoir_domain() and matrix-based geometry.
    • Updated EGS case to pass well direction to compute_peaceman_index and setup_well for more accurate well modelling.
  • Code Organization: Moved case utilities into a utils/ subfolder.
  • Citation: Added CITATION.cff with reference to GET 2025 conference paper.

Bug Fixes

  • Updated EGS case based on well modelling bugfix in JutulDarcy.

Testing

  • Added tests for layered_reservoir_domain setup.
  • Updated meshing and case tests for the new matrix-based geometry functionality.

Merged pull requests:

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 22 Dec 20:22
28eeeab

Fimbul v0.3.1

Diff since v0.3.0

Release Notes Fimbul v0.3.1

New Features

  • BTES and Closed-Loop Systems:
    • Added support for U1 (U-tube) and coaxial borehole thermal energy storage (BTES) systems.
    • Implemented analytical solutions for BTES and coaxial systems for validation.
    • Added convenience functions for deriving closed-loop geometry from well data domains.

Improvements

  • Meshing: Added option to control terminal output during meshing.
  • Validation: Added validation functionality for closed-loop systems.

Bug Fixes

  • Corrected units in axis labels.
  • Fixed minor bugs in BTES setup and coaxial implementation.

Merged pull requests:

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 08:00
35330a1

Fimbul v0.3.0

Diff since v0.2.1

Fimbul.jl v0.3.0 Release Notes

Breaking changes:

  • Case setup functions: All setup functions now returns meta-data and other useful case info to case.input_data instead of as separate outputs.
    -Schedule setup: Function make_schedule() now require that the first and last dates are identical for cases set up with dates.

Major New Features

Advanced Geothermal Systems (AGS)

  • New ags() function: Complete AGS case setup with closed-loop circulation systems

Enhanced Well Systems

  • New well utilities: setup_btes_well() and setup_vertical_btes_well() for specialized BTES configurations, moved over from JutulDarcy.

Expanded Testing Framework

  • Comprehensive schedule testing: Robust validation of time-dependent scheduling with multiple cycles

Enhanced Documentation & Examples

  • AGS demo: Complete workflow demonstrating closed-loop geothermal systems
  • Improved example comments: Enhanced technical explanations and educational content
  • Better function documentation: More comprehensive parameter descriptions and usage examples

New/enhanced functions

  • ags() - Advanced Geothermal System setup
  • setup_btes_well() - BTES well configuration
  • setup_vertical_btes_well() - Vertical BTES well setup
  • Improved make_schedule() with better date handling

Documentation: sintefmath.github.io/Fimbul.jl
Source Code: github.com/sintefmath/Fimbul.jl

Developed by SINTEF Digital

Merged pull requests:

  • Refactor to new JutulDarcy release (#28) (@strene)

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 29 Sep 22:49
2102418

Fimbul v0.2.1

Diff since v0.2.0

Enhanced Geothermal Systems (EGS) Support

New Features:

  • EGS Case Setup: Added egs() function for creating Enhanced Geothermal System simulations with fracture networks

EGS Demo Example:

  • Complete EGS simulation workflow with 10-year thermal depletion analysis
  • Individual fracture performance tracking and visualization

For detailed documentation and examples, visit the Fimbul.jl documentation.

Merged pull requests:

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 13:21
f28fd57

Fimbul v0.2.0

Diff since v0.1.0

Fimbul.jl v0.2.0 – Release Notes

Breaking Changes

  • make_utes_schedule
    The function now expects charge and discharge periods to be specified as date ranges:
    • Charging: [start_charge, end_charge]
    • Discharging: [start_discharge, end_discharge]
      This replaces the previous format using month names. Internally, the function delegates to a new utility, make_schedule, for processing.

New Features

  • ates
    A new function for setting up simulation cases for Aquifer Thermal Energy Storage (ATES) systems.

  • make_schedule
    A utility for defining simulation schedules composed of multiple periods, each with distinct driving forces.

Merged pull requests: