Repository navigation
Releases: sintefmath/Fimbul.jl
Release list
v0.4.0
Fimbul v0.4.0
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_stateto 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!forH2OSystemmodels acceptsdh_max_absto limit the absolute enthalpy change per Newton iteration (not limited by default).add_thermal_to_model!forH2OSystemmodels now passes keyword arguments on to JutulDarcy. Previously, calls with keyword arguments silently bypassed theH2OSystemoverload.
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
SteamTablesH2Oartifact 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:
v0.3.6
Fimbul v0.3.6
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 newCoolProppackage extension,build_steam_tables_h2ocan 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–:efrom 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.jlandexamples/validation/validation_ht_2d.jl. Analytical examples moved fromexamples/analyticaltoexamples/validation.
Plotting (GLMakie extension)
- New phase-diagram plotting:
plot_phase_diagram_contours(!),plot_reservoir_state_ph(!)andplot_reservoir_state_phase_diagram(!).
Improvements
coaxial_bhe: newhz_minkeyword for vertical refinement near the well, and better default meshing. For vertical wells, perforation lengths are now taken from the celldz, 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
Fimbul v0.3.5
Fimbul v0.3.5
New features
Fractured Thermal Energy Storage (ftes)
- New
ftescase 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
egscase now uses cut_mesh with polygonal fracture cuts (PolygonalSurface), allowing more general fracture geometries. examples/production/egs_demo.jlnow compares varying well spacing and effect of angled fractures
Coaxial BHE
- New deep
coaxial_bhecase, 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 inegsandftes.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_fracturesandstrike_dip_to_normal.
Merged pull requests:
v0.3.4
Fimbul v0.3.4
Release Notes v0.3.4
Improvements
- Reinjection Target: Updated all cases (ATES, BTES, geothermal doublet, EGS) to use the new simplified
ReinjectionTargetconstructor from JutulDarcy, which no longer requires a rate argument.
Bug Fixes
- Removed stray
printlndebug statement from AGS demo example.
Merged pull requests:
v0.3.3
Fimbul v0.3.3
Release Notes v0.3.3
Bug Fixes
- Convex Hull Algorithm: Fixed a termination issue in
get_convex_hullwhere 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:
v0.3.2
Fimbul v0.3.2
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.
- Added
Improvements
- Geometry Representation:
- Switched from
Vector{Tuple}toMatrix(2×N / 3×N) representation for all geometry and meshing operations, improving consistency and performance.
- Switched from
- Case Setup:
- Refactored
geothermal_doublet(),ags(), andegs()to use the newlayered_reservoir_domain()and matrix-based geometry. - Updated EGS case to pass well direction to
compute_peaceman_indexandsetup_wellfor more accurate well modelling.
- Refactored
- Code Organization: Moved case utilities into a
utils/subfolder. - Citation: Added
CITATION.cffwith reference to GET 2025 conference paper.
Bug Fixes
- Updated EGS case based on well modelling bugfix in JutulDarcy.
Testing
- Added tests for
layered_reservoir_domainsetup. - Updated meshing and case tests for the new matrix-based geometry functionality.
Merged pull requests:
v0.3.1
Fimbul v0.3.1
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
Fimbul v0.3.0
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: Functionmake_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()andsetup_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 setupsetup_btes_well()- BTES well configurationsetup_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:
v0.2.1
Fimbul v0.2.1
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
Fimbul v0.2.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.
- Charging:
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: