github OPM/opm-common release/2026.04/final
Release 2026.04

3 hours ago

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_layers import 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] NNCCollection for LGR by @arturcastiel in #5037
  • Support for LGR-specific transmissibilities in writeInitial by @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::fromLGROutputContainers and 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

Don't miss a new opm-common release

NewReleases is sending notifications on new releases.