OpenGeoSys 6.5.9 released!

DOI

We are happy to announce the release of OpenGeoSys 6.5.9!

Links

Highlights

Process’ changes

TH2M

  • !5784 The unused process parameter reference_temperature was removed, see issue #3135.

Component transport process / reactive transport process with coupling of Phreeqc

  • !5591 OGS-PhreeqC reactive transport runs under OpenMP, MPI or both (hybrid parallelisation): ghost nodes are synchronised before chemistry, PhreeqC instances are pooled, and the thread count is set in the prj file. Chemistry on large domains gets faster.
  • !5623 Porosity and permeability are updated for post-processing also without chemical reactions, and porosity can be given as a function expression in the prj file. New Kozeny-Carman benchmark for the time-dependent porosity.
  • !5728 Integration point coordinates are set for the staggered HTC equations, so medium properties may depend on position and time. New benchmark with a coordinate-dependent permeability.
  • !5748 ComponentTransport accesses the temperature through a single code path, and the Newton scheme rejects non-isothermal setups instead of silently computing with a wrong temperature.

HeatTransportBHE

  • !5608 TESPy pipe-network scripts and definition files updated to the TESPy 0.11 API, network data as JSON instead of CSV. The previously deactivated OGS-TESPy benchmarks are active again. No change of the OGS source code was needed.
  • !5690 Borehole diameter and pipe wall thermal conductivity are per-element ParameterLib parameters, so the BHE geometry can vary in space. Degenerate geometry (NaN, zero or negative diameters, too narrow grout spacing) is rejected at input instead of producing silent nonsense.

HT

  • !5697 New tag <equation_balance_type>: the mass balance formulation is required whenever the liquid density is not constant, because the volume balance formulation loses accuracy there. Thermal expansion uses MPL properties, a missing MpT term was added, and <solid_thermal_expansion> was removed.
  • !5785 Fixes the assert for the specific storage, rejects a Biot coefficient of one together with a non-zero storage, corrects the material data of three benchmarks and reworks the HT process documentation.

LiquidFlow process

  • !5729 New rough-fracture benchmark, Darcy flow for nine combinations of JRC and stress, together with a fix of the aperture evaluation at the integration points.

ThermoHydroMechanics

  • !5751 Stored sensible heat, without latent heat, is computed and written out element-wise. Reconstructing it in post-processing was awkward and inexact, in particular with freezing.

WellboreSimulator

  • !5843 The void fraction is solved in closed form instead of with a local Newton solver: no non-admissible solutions and fewer global iterations. Supercritical sections are treated as compressed liquid, superheated steam is reported instead of hidden, and the process is restricted to vertical wells.

Constitutive relations (material models)

  • !5727 Thermo-osmosis can be parameterised with thermo_osmotic_permeability; the coefficient is then computed from medium permeability and liquid viscosity. Breaking: thermo_osmosis_coefficient moves from the solid phase to the medium level, conversion script in scripts/dev.

Parameters

  • !5620 FunctionParameter and MPL Function share the exprtk handling in ParameterLib, including the performance work. Expressions are rejected if a curve name collides with an exprtk symbol or if they assign to a registered symbol; both were silently wrong before.
  • !5746 Function expressions that contain neither x nor y nor z are evaluated without a spatial position, for example exp(t).
  • !5816 TimeDependentHeterogeneousParameter is renamed to TimeDependentHeterogeneous, so the tag matches the documentation, plus several documentation link fixes.

Numerics

  • !5714 Anderson acceleration for the Picard solver: the solution trajectory of the last <depth> iterations is reused to accelerate convergence, with a guard against cancellation for collinear residuals.
  • !5715 Tikhonov regularisation adds a small lambda to the Jacobian diagonal from a configurable iteration onwards, which restores convergence for ill-conditioned Jacobians, shown on the DECOVALEX ThermoRichardsFlow benchmark.
  • !5779 Damping factor for the Picard fixed point iteration, which makes strongly nonlinear coefficients converge, demonstrated on a heat conduction problem with a temperature-dependent Robin flux.
  • !5783 Time stepping receives the maximum number of iterations over all processes and the global staggered loop instead of the number of the last process, so the step size reacts to the hardest equation.
  • !5801 A time step is rejected when the global coupling loop does not converge. Before, the loop was left silently without convergence; a sloppy tolerance must be chosen explicitly now.
  • !5810 PETSc matrices are preallocated from the exact sparsity pattern, per-row nonzero counts with column indices, instead of uniform estimates, and a matrix copy reuses the pattern. Less memory and faster preallocation.
  • !5843 The Picard solver retreats when an assembly is aborted, instead of letting the simulation fail.
  • !5854 An AssemblyException from a local assembler, for example a non-converged local solver, aborts the nonlinear iteration on the Picard path as well. The time step is reported as non-converged and repeated with a smaller size instead of aborting the simulation.

Generic features

  • !5669 New prj block <overwrite_mesh_data> sets, removes or keeps node, cell and integration point fields by material ids before the simulation starts. It replaces zero_mesh_field_data_by_material_ids and is rejected for PETSc partitioned meshes.
  • !5753 ConfigTree::getAllChildren() parses heterogeneous XML subtags in their order of appearance.
  • !5774 PropertyVector::push_back was removed, so a property vector can no longer be extended accidentally through this interface.
  • !5775 clang-tidy warnings cleanup; every fixed check is enabled as an error afterwards, so these warnings cannot return.
  • !5818 partmesh writes a single element list per partition instead of regular plus ghost elements. The binary format stays compatible, and the reader warns when a legacy file with ghost elements is read.
  • !5829 Non-unique mesh names are an OGS_FATAL error now; duplicated mesh names were accepted silently before.

Tools

  • !5774 MeshRevision copies cell properties with the correct size, RasterDataToMesh fails hard when a property cannot be created, and IntegrateBoreholesIntoMesh checks the creation of MaterialIDs.

Python & Jupyter

  • !5608 The embedded Python venv processes .pth files when it adds site-packages, so packages such as TESPy 0.11 can be imported from prj-file Python scripts.
  • !5742 PETSc notebooks link to the PETSc Binder environment; Binder started a serial environment for them before.
  • !5763 Notebook for the Selke 2D LiquidFlow benchmark showing a complete OGSTools workflow: build the model, visualise boundary conditions, run, probe points over time, modify the prj file, run again and compare.
  • !5840 Binder instances start with sparse checkouts, which shortens their startup time considerably.

Testing

  • !5747 First batch of AddTest() calls converted to OgsTest(), where the test definition lives in the prj file.
  • !5750 OgsTest() infrastructure: prj test definitions support different file and array names for reference and output data and xdmfdiff-based tests, and OgsTest() gained PATCH_FILES, NAME_SUFFIX and EXECUTABLE_ARGS.
  • !5848 Coordinate-dependent material property tests are collected in CoordinatesDependentVariableTest with clearer names, and the PHREEQC databases are shared in SharedDatabase instead of being duplicated per test.

Bug fixes

  • !5606 The compare-Jacobian assembler works again for processes using the OpenMP parallel assembly, restricted to a single assembly thread to avoid concurrent file writes. Its output carries time, element id and iteration, and the residuum tolerances abs_tol_res and rel_tol_res were added.
  • !5769 The logging uses a thread-safe sink, so log lines written from OpenMP threads are no longer mixed into each other.
  • !5772 On Windows the stdout sink resolves the stdout handle per write. Runs that redirect file descriptors in-process (wheel, pytest, Jupyter, OGSTools) could otherwise write console output into the local matrix log file, or lose it.
  • !5789 std::set construction with std::from_range is replaced by ranges-v3, so OGS builds again with older standard libraries.
  • !5819 Times in domain deactivation are compared with NumLib::Time and its tolerance. The accumulated time could miss the end of a deactivation interval by one ULP, which activated the whole deactivated domain for that step. Same fix for DirichletWithinTimeInterval.
  • !5827 The vendored IPhreeqc 3.5.0 is patched: its selected-output buffers were never cleared, because both clearing loops end at begin() instead of end(). PhreeqC-coupled reactive transport leaked about 7 MB per time step and was OOM-killed in long runs.

CMake

  • !5800 The hash of the external dependency build directory no longer contains the source directory, so the same dependency build is reused by several source copies. Triggers one VTK rebuild.
  • !5807 The build option OGS_FATAL_ABORT was removed.
  • !5828 New preset release-petsc-full for a local PETSc build with MUMPS; the no-unity CI job does not need the petsc label any more.
  • !5844 Fixes the linking of the OGSSimulator, OGSMesh and mpl Python modules against a static VTK.

Infrastructure

  • !5808 CI submits configure and build data to CDash, not only the test results.
  • !5832 The Guix manifest uses a newer Eigen with the OpenMP fix, which repairs OpenMP in Apptainer images generated with Guix.
  • !5837 Update to OGSTools 0.8.2.

File I/O

  • !5761 New hdf option store_static_data_separately writes static data into their own HDF5 file, so time-independent data are no longer repeated in the time series file.
  • !5774 Gocad ASCII reader: node properties are appended across sections and element ids stay stable, so multi-section Gocad files are read correctly.
  • !5813 New prj tag <static_variables>: the listed output variables are written once by the XDMF/HDF5 writer instead of once per time step. Other output formats ignore the list.

Material Property Library (MPL)

  • !5620 The Function property evaluates faster: exprtk variable pointers are cached, scalar copies use offset arithmetic, and evaluateExpressions works on a stack array. Measured on a TH2M model with several Function properties.
  • !5743 New Sigmoid property, a plain [0,1] function of an arbitrary variable, replaces TemperatureDependentFraction. The porosity factor moved to the caller, so the frozen liquid volume fraction is independent of porosity and can be exchanged by other functions.
  • !5754 The Function property supports d2value expressions, so second derivatives are available, for example for freezing models.
  • !5843 The drift-flux closure and the steam dryness live in their own translation units, and the IAPWS-IF97 region 4 properties retreat outside the saturation pressure range instead of extrapolating.

Documentation

  • !5344 Tutorial and notebook showing how to mimic a moving Dirichlet boundary condition in HeatConduction, for example the rise of a landfill embankment or a tailings dam during construction.
  • !5749 Documentation fixes: <constitutive_relation> documented for THM, TRM and TH2M, nonlinear solver documentation restructured, curve documentation moved to its proper place, VTK/XDMF documentation extended. Undocumented tags produce a red warning now.
  • !5760 Discourse comments are embedded into the documentation pages.
  • !5766 Reworked website layout: new front page, adapted layouts on all pages, better display on mobile devices with a collapsed sidebar, and OGSTools on the publications page.
  • !5830 ModelHub pages for the EURAD subprojects, with placeholders for the notebooks referenced in the DigBen project report.

Version info

  • LIS: 2.0.30
  • OGSTools: 0.8.2