Release Highlights
- Added the option to solve the energy equations sequentially after the black-oil equations.
- Support has been added for pressure and temperature dependent water viscosity for runs with brine (BRINE) and energy (THERMAL).
- Flow now supports runs with brine (BRINE) and energy (THERMAL).
- Added support for double precision WORK arrays for compressed property arrays (for example SOGCR).
- If necessary, the gas PVT tables PVTG and PVDG are modified internally to ensure that negative inverse formation volume factors will never be extrapolated.
- Implemented endpoint scaling for gas-water systems.
- Killough's hysteresis wetting phase modification (EHYSTR keyword item 13) is now supported.
- Added support for RSCONST keyword to define a constant solution gas-oil ratio for all dead oil PVT tables.
- Added support for EQUIL keyword item 9 (EQLOPT3) greater than zero.
- Added support for well energy injection/production rate and total summary vectors: WTPRHEA, WTPTHEA, WTIRHEA and WTITHEA.
- Support has been added for the gas lift injection total summary vectors: FGLIT, GGLIT, and WGLIT.
- Extended summary (ESMRY) files are now output by default. The command line option --enable-esmry is now set to true by default.
- Added support for region oil recovery efficiency summary vector ROE.
- Production and gas lift supply rates from satellite groups (GSATPROD) are now accumulated in summary output.
- Added support for inter-block flows of oil, water, and gas in the negative i, j, and k directions (BFLO[GOW][IJK]-).
- Added support for summary output of inter-block oil, water, and gas velocities in the positive/negative i, j, and k directions (BVEL[GOW][IJK][-]).
- All current well lists are now reported to the Print (PRT) file when the WELSPECS mnemonic is specified on the RPTSCHED keyword.
- Support for using the WDFAC and BRANPROP keywords in an ACTIONX block has been successfully tested.
- The grid independent well keywords WELTRAJ and COMPTRAJ now partially support multi-segment wells.
- Added support for using well completion quantities in ACTIONX Boolean conditions.
- Added partial support for the TUNINGDP keyword.
- Added support for VFPPROD tables with only one data record (single-line lift curves).
- The default value for the NUPCOL keyword has been reduced to from 12 to 3.
- Drift compensation is now applied to mass losses in the energy equations when using the temperature model (TEMP).
What's Changed
- bump version to 2026.04-pre by @akva2 in #4773
- Tidy Up Parts of ScheduleState Implementation by @bska in #4783
- Include for Back_Inserter Type by @bska in #4784
- Janitoring: add missing parameter to doxy by @akva2 in #4785
- removing two unused functions in ColumnSchema by @GitPaean in #4786
- Update imports to run python -m unittest discover -s tests by @daavid00 in #4782
- introducing own .pre-commit-config.yaml for OPM-common by @GitPaean in #4791
- changed: remove buildsystem support for static analysis by @akva2 in #4794
- UDQ support for WTRACER by @daavid00 in #4793
- Account for NTG in calc of average thermal conductivity from THC* keywords by @vkip in #4796
- using measure::energy_rate for energy rate output by @GitPaean in #4798
- Support cumulative gas lift vectors (WGLIT, GGLIT, FGLIT) by @vkip in #4802
- Extract Helper Class for Parsing and Applying WLIST Operations by @bska in #4777
- Document Well List Classes by @bska in #4778
- Track Structural Changes to Run's Well Lists by @bska in #4787
- Emit Well List Contents in RPTSCHED WELSPECS by @bska in #4788
- Updating AICD/SICD scaling factors after parsing the whole report step by @GitPaean in #4803
- LGR AggregateGroupData for LGR by @arturcastiel in #4799
- add pointer arithmetic utility by @multitalentloes in #4797
- checking phase existence before adding rate constraints in WCONPROD by @GitPaean in #4806
- Enable compatibility with newer CMake and Boost by @SoilRos in #4807
- Add energy module type by @totto82 in #4789
- [LGR] Bugfix WGIT and WGIR added to wellKeyToIndex by @arturcastiel in #4809
- Scalar dynamic evaluation by @GitPaean in #4673
- Changed assert to abort in ErrorMacros for GPU use by @kjetilly in #4795
- Fixed comments for error macros on GPU by @kjetilly in #4812
- janitoring: add phases to doxy by @akva2 in #4816
- changed: use env to obtain python3 binary to use by @akva2 in #4815
- LGR writeGroupLGR reactivated by @arturcastiel in #4814
- LGR General Bug Fixes by @arturcastiel in #4813
- Fix DRSDT Restart File Output Units by @bska in #4818
- Include for Std::uint8_t by @bska in #4821
- Group::InjectionCMode2String should handle SALE control by @GitPaean in #4824
- Change .clang-format ColumnLimit to 100 characters by @hakonhagland in #4826
- Change Oil Vaporisation Properties to a Ptr_Member by @bska in #4817
- Skip Load Time Schedule Keyword Compatibility Check for Restarted Runs by @bska in #4822
- Add Restart File Support for VAPPARS by @bska in #4819
- LGR: Output Integration Test by @arturcastiel in #4827
- Extend gas table padding to cover additional case. by @atgeirr in #4828
- SICD::updateScalingFactor return true only when m_scaling_factor is actually changed. by @GitPaean in #4831
- added: handle failure_report in git-hosted jenkins script by @akva2 in #4832
- Adding the ROE summary vector by @vkip in #4833
- assert to remove an analyzer warning in PhaseUsageInfo by @GitPaean in #4823
- Support restart for TEMP and gas tracers by @vkip in #4811
- Include Time of Day in Report Step List by @bska in #4830
- Avoiding multiplexer static_assert for nvcc by @kjetilly in #4835
- Adapt to sequential implicit approach when TEMP is used by @totto82 in #4825
- removing the redundant const in Units by @GitPaean in #4841
- WDFAC and BRANPROP in ACTIONX by @tskille in #4847
- Added CMake check for AVX2 by @blattms in #4840
- Cleaning up compsegs by @GitPaean in #4848
- Make
scaler_layersimport optional to avoid TensorFlow requirement by @lechevaa in #4851 - Document SummaryConfig Class by @bska in #4853
- Fix test NNLayerDenseApply by @lechevaa in #4852
- Polish SummaryConfig Implementation by @bska in #4854
- Make the order of distributed wells uniform across ranks by @michal-toth in #4849
- Drop Region Set From Vector Names in SummaryState::update() Call by @bska in #4858
- add run trigger handling in jenkins build script by @akva2 in #4860
- Remove tensorflow dependency + add tests by @lechevaa in #4857
- split submitting data update PR from branch creation by @akva2 in #4862
- Properly handle ALQ units in BRANPROP by @atgeirr in #4844
- Make initial reason a non-blank string (Unknown) by @akva2 in #4864
- Add Support for WORK Arrays in OPERATE and OPERATER by @bska in #4861
- Add load model method to load back exported machine learning model by @lechevaa in #4863
- Extend WELTRAJ/COMPTRAJ to support multi-segment wells for grid-independent wells by @verveerpj in #4524
- changed: rename mpi build configuration to 'default' by @akva2 in #4867
- only set -fext-numeric-literals for c++ sources by @akva2 in #4868
- EclipseGrid::save and EclipseGridLGR::save refactored. by @arturcastiel in #4845
- remove some relative path usage by @akva2 in #4869
- LGR CPG Refinement - COORD by @arturcastiel in #4839
- separate cloning from building in jenkins pipeline by @akva2 in #4870
- Emit Colourised Output Only to Interactive Terminal by @bska in #4871
- source build configuration script in build scripts by @akva2 in #4872
- Jenkins build scripts: add static analysis by @akva2 in #4873
- [LGR] Zcorn by @arturcastiel in #4843
- jenkins: make test timeout configurable by @akva2 in #4874
- [LGR] Remove obsolete LGR functions by @arturcastiel in #4875
- Add GuideRate::erase() method to help with testing by @hakonhagland in #4876
- allow overriding base of opm repositories in jenkins build scripts by @akva2 in #4877
- for absolute revision, use 'update' for branch name by @akva2 in #4879
- Fix warnings for builds with -DWITH_NDEBUG=1 by @daavid00 in #4880
- jenkins: fix update_data with existing PR in opm-tests by @akva2 in #4881
- Revise Summary::Eval() Function Signature by @bska in #4882
- Check Fn_Args::Extra_Data Availability Before Access by @bska in #4883
- Bring Doxygen Documentation for Summary::Eval Up to Date by @bska in #4884
- Remove warning ignoring duplicate libraries by @daavid00 in #4887
- summary: add option -o by @akva2 in #4888
- EGrid::EGrid: split out LGR handling into lambda by @akva2 in #4889
- an example to visualize segment and connection structure for multisegment wells. by @GitPaean in #4886
- added: ignore list for cppcheck in static analysis by @akva2 in #4891
- fixed: only run sequential norne when requested by @akva2 in #4894
- run parallel norne with 8 procs by @akva2 in #4893
- Janitoring: some header cleanup by @akva2 in #4896
- Janitoring: prepare for c++-20 by @akva2 in #4897
- Support well completion quantities in ACTIONX by @blattms in #4855
- Accumulate satellite gaslift (support for GSATPROD item 6) by @totto82 in #4892
- Remove Unused ParseContext Member Functions by @bska in #4900
- FIX. Dont include satellites among the wellgroups by @totto82 in #4899
- Janitoring: address some static analytics by @akva2 in #4901
- changed: canonicalize input path by @akva2 in #4903
- build main module from deps by @akva2 in #4902
- fixed: add missing initializers by @akva2 in #4885
- changed: put message file in workspace by @akva2 in #4910
- Revert "build main module from deps" by @akva2 in #4912
- Varnish ParseContext Implementation by @bska in #4905
- changed: use cmake mechanisms for C standard by @akva2 in #4914
- Allow usage of more well completion quants in ACTIONX. by @blattms in #4898
- Fix installation woes by @akva2 in #4913
- remove HAVE_DUNE_BOOST alias by @akva2 in #4917
- fixed: install generated headers in proper path by @akva2 in #4916
- remove debug symbol split handling by @akva2 in #4918
- remove attempt at support a dist-clean target by @akva2 in #4919
- remove home baked PCH support by @akva2 in #4920
- remove --with-xxx emulation by @akva2 in #4921
- Varnish Compsegs Handling by @bska in #4906
- Diagnose Case Where COMPSEGS References Missing Segment by @bska in #4907
- changed: handle header file installation using modern cmake mechanism by @akva2 in #4922
- TUNINGDP keyword by @svenn-t in #4890
- KeywordLoader: winter cleaning by @akva2 in #4928
- changed: consistently use keyword based target_link_libraries by @akva2 in #4925
- data/output: remove json serialization by @akva2 in #4929
- Fix endpoint scaling for gas-water system by @totto82 in #4923
- cJson: use its shipped config files by @akva2 in #4927
- fixed: forgotten include path for opmcommon with downloaded cjson by @akva2 in #4933
- fixed: mocksim needs PUBLIC link to opmcommon by @akva2 in #4932
- fixed: downloaded cjson with super-build by @akva2 in #4934
- fixed: properly integrate with CTest by @akva2 in #4935
- fixed: have to manually enable PIC by @akva2 in #4937
- Use targets to export utilities by @akva2 in #4936
- changed: remove global option for use of PETSc by @akva2 in #4938
- Warn if ICD References a Missing Segment by @bska in #4908
- remove unused macro by @akva2 in #4939
- removing the constructor based on an int value for DynamicEvaluation by @GitPaean in #4926
- changed: invert warning option by @akva2 in #4941
- OpmCompile: some cleanups by @akva2 in #4942
- changed: use target_compile_options and target_compile_definitions for warnings by @akva2 in #4943
- UseOpenMP: fully utilize targets by @akva2 in #4940
- use_warnings: convert to function by @akva2 in #4944
- LGR: Bugfix on AggregateWellDataLGR by @arturcastiel in #4915
- UseFastBuilds: convert to function by @akva2 in #4945
- Additional optimizations: convert to function by @akva2 in #4946
- OpmCompilerChecks: remove pre gcc-9 (gcc-8) support by @akva2 in #4947
- remove no_default_options by @akva2 in #4948
- use_only_needed: convert to a function and use target_link_options by @akva2 in #4949
- use_threads: convert to a function by @akva2 in #4950
- Rename mutable operator() to mutableData(). by @atgeirr in #4951
- Fix VFPPROD single-line table handling by @ElyesAhmed in #4909
- split out UseRunPath from OpmDefaults by @akva2 in #4952
- Cleanup: Add convenience function, remove unnecessary string based code by @akva2 in #4953
- remove opm_auto_dirs by @akva2 in #4955
- BFLO[G|O|W][I|J|K][|-] summary keywords by @daavid00 in #4954
- changed: remove UseThreading by @akva2 in #4957
- Remove opm_out_dirs by @akva2 in #4956
- Hooks cleanup: rename hooks to ${project}_xxx_hook by @akva2 in #4958
- Find rules: add imported targets by @akva2 in #4959
- changed: extract MPI_2 check from Finddune-common by @akva2 in #4960
- Polish ScheduleDeck Implementation Files by @bska in #4962
- drop support for old cmake in python code by @akva2 in #4964
- OpmSatellites: use target Boost::unit_test_framework by @akva2 in #4965
- remove outdated python variables by @akva2 in #4967
- Report Missing SKIPREST Unless DATES Strictly Later Than Restart by @bska in #4963
- Move all find_package code into prereqs hook by @akva2 in #4968
- More hook usage by @akva2 in #4969
- consistently use Boost::unit_test_framework target by @akva2 in #4966
- Fix some installation issues by @akva2 in #4970
- changed: repurpose ADDITIONAL_SOURCE_FILES by @akva2 in #4971
- fixed: set ${project}_VERSION in OpmInit, not OpmCompile by @akva2 in #4972
- pybind11: use target mode by @akva2 in #4974
- Add targets hook and use it by @akva2 in #4973
- Generalize cmake code to work also on macOS. by @atgeirr in #4976
- add a HDF5 setting file by @akva2 in #4977
- remove the functions related to Schedule::filterConnections() by @GitPaean in #4975
- CMakeLists_files.cmake: make it 'official' by @akva2 in #4978
- Dune enabled tests: Some cleanup by @akva2 in #4980
- Use 3 as default for MINNPCOL and NUPCOL by @totto82 in #4373
- fixed: make sure downloaded pybind11 uses new python find modules by @akva2 in #4981
- remove UseDamaris by @akva2 in #4982
- Link all targets to OpenMP by @akva2 in #4984
- fixed: downloaded pybind11 with sibling builds by @akva2 in #4986
- use updated cuda version string variable by @akva2 in #4987
- set policies in OpmInit by @akva2 in #4988
- BVEL[G|O|W][I|J|K][|-] summary keywords by @daavid00 in #4989
- hypre needs cusolver by @akva2 in #4991
- mark format strings runtime by @akva2 in #4992
- Refactor blackoil fluidstate by @totto82 in #4979
- Fix Documentation Blocks for writeTimeStep by @bska in #4995
- [LGR] EclipseGridLGR::generate_refined_coord refactored by @arturcastiel in #4985
- Instantiate float EclThermalLawManager by @multitalentloes in #4994
- enable c++ 20 by @akva2 in #4997
- moving the group structure visulization to GroupStructureViz by @GitPaean in #4895
- Make TIME Monotonicity Check Independent of Schedule by @bska in #4996
- replace std::transform with std::ranges::transform where appropriate by @akva2 in #4998
- replace std::sort with std::ranges::sort where appropriate by @akva2 in #4999
- replace std::for_each with std::ranges::for_each where appropriate by @akva2 in #5000
- replace std::copy with std::ranges::copy where appropriate by @akva2 in #5001
- replace std::copy_if with std::ranges::copy_if where appropriate by @akva2 in #5002
- replace std::fill with std::ranges::fill where appropriate by @akva2 in #5003
- replace std::count with std::ranges::count where appropriate by @akva2 in #5004
- replace std::count_if with std::ranges::count_if where appropriate by @akva2 in #5005
- replace std::any_of with std::ranges::any_of where appropriate by @akva2 in #5006
- add support for tracy in generic build system by @akva2 in #5007
- replace std::find with std::ranges::find where appropriate by @akva2 in #5008
- replace std::find_if with std::ranges::find_if where appropriate by @akva2 in #5009
- [LGR] EclipseGridLGR::generate_refined_zcorn refactored by @arturcastiel in #4990
- replace std::min_element with std::ranges::min_element where appropriate by @akva2 in #5010
- replace std::max_element with std::ranges::max_element where appropriate by @akva2 in #5011
- replace std::all_of with std::ranges::all_of where appropriate by @akva2 in #5012
- replace std::none_of with std::ranges::none_of where appropriate by @akva2 in #5013
- replace std::binary_search with std::ranges::binary_search where appropriate by @akva2 in #5014
- replace std::set_union with std::ranges::set_union where appropriate by @akva2 in #5015
- replace std::is_sorted with std::ranges::is_sorted where appropriate by @akva2 in #5016
- replace std::adjacent_find with std::ranges::adjacent_find where appropriate by @akva2 in #5017
- replace std::reverse with std::ranges::reverse where appropriate by @akva2 in #5018
- replace std::equal with std::ranges::equal where appropriate by @akva2 in #5019
- replace std::set_difference with std::ranges::set_difference where appropriate by @akva2 in #5020
- replace erase-remove idiom with std::erase[_if] by @akva2 in #5022
- replace std::set_intersection with std::ranges::set_intersection where appropriate by @akva2 in #5021
- fixed: do not force header-only boost in unit test by @akva2 in #5023
- mark pybind11 include dirs system by @akva2 in #5030
- catch error in opmi by @akva2 in #5031
- Use a property to signal python embedded status by @akva2 in #5033
- Minor bugfix and small speed improvement by @atgeirr in #5027
- Clean up config file by @akva2 in #5035
- Enable PYINPUT Processing Through Common Python Interpreter by @bska in #5029
- add support for valgrind in generic build system by @akva2 in #5041
- [LGR]
NNCCollectionfor LGR by @arturcastiel in #5037 - Support for LGR-specific transmissibilities in
writeInitialby @arturcastiel in #5028 - use vector instead of array by @akva2 in #5042
- opm-common gpu assembly prep by @multitalentloes in #5040
- Cleanup config.h by @akva2 in #5043
- Add fix for wetting phase killough (item 13 in EHYSTR) by @totto82 in #5032
- Link ML Tests to Dune-Common If Found by @bska in #5044
- change fortran hook to a generic language hook by @akva2 in #5046
- UseFortranWrapper: remove by @akva2 in #5047
- OpmLibMain: use prereqs file by @akva2 in #5048
- remove ENABLE_ECL_(IN|OUT)PUT options by @akva2 in #5039
- DownloadFmt: don't use globals by @akva2 in #5050
- use targets for prereqs by @akva2 in #5051
- Some find rule enhancements by @akva2 in #5052
- OpmPolicies: reorganize to get appropriate scope by @akva2 in #5054
- Finddune-istl: create target by @akva2 in #5055
- DownloadFmt: export variables to parent scope if it exists by @akva2 in #5056
- OpmInit: some cleanup by @akva2 in #5057
- adding temperature support for PTFlash by @GitPaean in #5053
- [LGR] Add NNCDiffGrid class and EGRID output support for cross-grid NNCs (NNCL/NNCG) by @arturcastiel in #5049
- Exclude REIN from Group::topup_phase() by @hakonhagland in #5058
- fix build with dune-istl 2.9 and superlu by @akva2 in #5059
- Updating Mass/ReservoirVolume and Mass/LengthLengthLength to Concentration/FoamDensity by @daavid00 in #5034
- [LGR] Support writing NNA blocks for cross-LGR NNC connections by @arturcastiel in #5060
- [bugfix] Make sure that an SMSPEC file is written at the last time step. by @blattms in #5062
- water viscosity calculation for brine + thermal by @plgbrts in #4656
- remove long outdated find modules by @akva2 in #5065
- ParMETIS: add target_compile_definition for HAVE_PARMETIS by @akva2 in #5066
- dune find modules: drop use of find_opm_package by @akva2 in #5067
- Prefer Std::Numbers::PI by @bska in #5063
- add CUDA use module by @akva2 in #5068
- adding solvent to BlackOilFluidState by @GitPaean in #5064
- Finddune-fem: need help remembering to look up superlu by @akva2 in #5069
- Keywords and well handling for opm-geochemistry module by @svenn-t in #5036
- mpi_checks: add HAVE_MPI compile definition to target by @akva2 in #5072
- SuiteSparse: add HAVE_SUITESPARSE_XXX compile definition to target by @akva2 in #5075
- Use target compile definitions for more targets by @akva2 in #5076
- parsing keyword ZMFVD by @GitPaean in #5070
- Remove now unused OpmFind and OpmPackage by @akva2 in #5081
- Use fmt::format to support older compilers. by @blattms in #5083
- Cleanup configure_vars by @akva2 in #5082
- opm_add_library: extend to handle more usage by @akva2 in #5084
- Check for out-of-bounds aquifer connections by @vkip in #5086
- Support Formalised Error Handling in COMPDAT by @bska in #5078
- Clarify the error message of the parser. by @michal-toth in #5071
- [LGR] Introduce NNCDataContainer and NNCDataContainerDiffGrid as runtime NNC storage types by @arturcastiel in #5088
- [LGR] NNC output support: TRANNNC, TRANGL, TRANLL in INIT file by @arturcastiel in #5077
- changing Scalar to ValueType for FluidState by @GitPaean in #5080
- More Summary Vectors for Fracture Quantities by @bska in #5024
- Correct handling of overlaping NNC and EDITNNC by @daavid00 in #5025
- Use imbibition curve directly if non-wetting saturation is below critical value by @totto82 in #5073
- Rsconst enq by @ElyesAhmed in #4993
- [LGR] Add
NNCCollection::fromLGROutputContainersand unit tests by @arturcastiel in #5089 - Allow the simulator to force an output write to be the final one. by @blattms in #5038
- Install Header for RSCONST Table by @bska in #5094
- Diagnose and Skip Well Connections in Zero Perm Cells by @bska in #5079
- Keywords and material state container for TPSA by @svenn-t in #4846
- Implement POTN group guide rate mode by @hakonhagland in #5098
- Fix CO2STORE/H2STORE salinity handling in diffusion coefficients and PVT conversion by @dlmorenob in #5097
- fixed: link suitesparse module targets to their extra libs by @akva2 in #5092
- Upgrade bundled fmt from 10.1.1 to 11.0.2 by @hakonhagland in #5090
- Backport PR5100: Prefer Compile Time Type Identification by @michal-toth in #5114
- Backport PR 4878: Also output RUNTIMEI to SMSPEC file. by @michal-toth in #5115
- Backport PR5111: fix doxy warnings by @michal-toth in #5117
- Backport PR5112: Teach ConvertECL About INSPEC and RSSPEC Files by @michal-toth in #5116
- Backport PR4571: [cmake] Search for OpenMP from the package configuration file by @michal-toth in #5121
- Backport PR5124: add missing parameter to doxy by @michal-toth in #5133
- Backport PR5125: [cmake,bugfix] Make include directories of ParMETIS usable by @michal-toth in #5134
New Contributors
@dlmorenob made their first contribution in #5108
Full Changelog: release/2025.10/final...release/2026.04/final