We happily announce today's release of DuMux 3.4.

Differences Between DuMux 3.4 and DuMux 3.3

Improvements and Enhancements

  • Requirements: DuMux still requires Dune >=2.7 and CMake >= 3.13. It was successfully tested with OPM 2021.04.

  • Pore-network models added to DuMux:

    • Three fully implicit pore-network models (1p, 1pnc, 2p) have been added.
    • A quasi-static 2p PNM for the creation of pc-Sw curves has been added.
    • A new namespace Dumux::PoreNetwork has been introduced, containing all relevant classes and functions for pore-network modeling.
    • An example introduces the use of the 1p PNM for the estimation of the upscaled Darcy permeability.
    • Advection type including inertia effect for simulations in the non-creeping flow regime is available.
    • Note that this is still considered a rather experimental feature. Everything within namespace Dumux::PoreNetwork might undergo (backward-compatibility breaking) changes without prior notice.
  • Several scripts have been translated to Python:

    • installexternal.sh to install external modules and libraries now rewritten as python script bin/installexternal.py
    • getusedversions.sh to extract the used DuMux/Dune versions of a module (new script: bin/util/getusedversions.py)
    • extractmodulepart.sh no longer creates an install file, instead, you can now generate install scripts for your module using the new script bin/util/makeinstallscript.py.
    • Note: the old shell scripts will be removed after release 3.4.
  • Python bindings: There is now a small finite volume example included in the Python tests using the wrapped grid geometry and problem, see test_explicit_transport_cctpfa.py.

  • Law for water vapor viscosity in gas mixtures changed: Polynomial laws for determining the viscosity of vater vapor in gas mixtures are introduced and applied by the new function h2oGasViscosityInMixture. The polynomial laws give a better approximation of the gas viscosity especially at higher temperatures ( >273.15 K) and a high water vapor content.

  • Newton line search: The line search algorithm decreases the step size until the residual decreases. The lower bound of the step size can now be set in the input file via the parameter Newton.LineSearchMinRelaxationFactor.

  • Material / Constant component: The Component::Constant can now be used in non-isothermal simulation. Simple relations for internal energy and enthalpy depending on temperature and constant heat capacity have been added.

  • Linear PDE solver: The LinearPDESolver can reuse the matrix and thus avoid unnecessary reassembly. See test/porousmediumflow/tracer/constvel/main.cc for an example.

  • Ordering strategies for UMFPack: It is now possible to choose an ordering strategy for UMFPack via the runtime parameter LinearSolver.UMFPackOrdering or by calling the setOrdering() method of UMFPackBackend. This can have a positive effect on the solver's performance, depending on the matrix structure.

  • Add setRetryTimeStepReductionFactor() function to NewtonSolver: This function allows to set the factor by which the time step is reduced after a failed iteration. Can be used, e.g., for custom Newton solvers inheriting from this class and using a more sophisticated time step management.

  • Improve upwind interface:

    • Additional functions have been added to upwindscheme.hh which can be used to apply the upwind scheme without the need of FluxVariables and to get the multiplier by which the flux is multiplied.
    • These additional functions are now used in CCTpfaForchheimersLaw by providing the upwind scheme as additional template argument.
  • Simplified use of SubGridManger: It is now possible to specify pixel dimensions when reading an image file used as grid. For instance, Grid.PixelDimension = 1e-3 1e-3 will scale the domain automatically such that the grid cells have a side length of 1e-3 m and you don't need to specify Grid.UpperRight anymore.

  • String utility: There is a new header common/stringutilities.hh that implements two functions tokenize and split that can split strings at a given delimiter.

  • Add linearRegression() function to math.hh: This function gets a set of (x, y) data and calculates/returns the intercept and the slope of the regression line using the standard least squares method.

  • Shallow water: Added a heuristic turbulence model based on a mixing length and resulting in a turbulent viscosity term.

Immediate interface changes not allowing/requiring a deprecation period:

  • Newton: The global parameter defaults have been substituted for local parameter defaults (in nonlinear/newtonsolver.hh). If you have been relying on global defaults (reading parameters without supplying a value in the input file nor a default) you will get a runtime ParameterException. To solve this simply provide a default or set the value in the input file.
  • MPNC: The MPAdapter can now also be called with a temporary pcKrSw object. For this, the compiler needs to deduce the class' template argument types. You may need to adapt your spatialParams from
using MPAdapter = Dumux::FluidMatrix::MPAdapter<PcKrSwCurve, 2>;
...
auto fluidMatrixInteractionAtPos(const GlobalPosition &globalPos) const
{
    return makeFluidMatrixInteraction(MPAdapter(pcKrSwCurve_));
}

to

// alias for MPAdapter is removed
auto fluidMatrixInteractionAtPos(const GlobalPosition &globalPos) const
{
    return makeFluidMatrixInteraction(FluidMatrix::MPAdapter(pcKrSwCurve_));
}
  • Grid geometry: The local views of grid geometries are now required to implement the interfaces element() (returning the bound element) and isBound() returning a bool which is true if the functions bind or bindElement have been called (i.e. the local geometry is in a bound state). These interfaces are currently not used (except in the unit tests) but will be required by the assembler in future DuMux versions.

Deprecated properties/classes/functions/files, to be removed after 3.4:

  • Dumux::IsIndexable<T, I> is deprecated, use Dune::IsIndexable<T, I>directly.

  • The property NumEqVector has been deprecated. The class NumEqVector is now defined in the namespace Dumux in the header file dumux/common/numeqvector.hh.

  • The member function update() of mappers is deprecated, use update(gridView) when updating the mapper after a grid or grid view change.

  • All custom mapper implementations should implement update(gridView) replacing update(). Mappers with update() will no longer be supported after support for Dune 2.7 is dropped.

New experimental features (possibly subject to backwards-incompatible changes in the future)

  • Time stepping: a first implementation of a generic Dumux::MultiStageTimeStepper was introduced, that allows for using different time integration schemes besides the currently supported implicit and explicit Euler schemes. However, this poses new requirements on the linear system assemblers, which are not yet met by the standard assemblers provided in DuMux. This will be extended in future versions.

Continuous integration

  • A first version of the DuMux GitLab CI is now at the disposal of all developers. While every night a complete test pipeline is triggered automatically, developers have the possibility to manually start test pipelines within merge requests that automatically identify and run only those tests affected by the changes introduced.