We happily announce today's release of DuMuX 3.2.

Differences Between DuMux 3.2 and DuMux 3.1

Improvements and Enhancements

  • C++17: DuMux now requires a C++ compiler supporting the C++17 features of GCC 7 (e.g. GCC 7, Clang 5).

  • Radially symmetric problems: We now have support for radially symmetric problems (disc, ball, toroid). The support comes in form of wrappers for sub control volumes and faces that overload the respective volume() and area() function turning a 1d or 2d problem into a 2d or 3d radially symmetric problem.

  • Improvements of Beavers-Joseph(-Saffman) condition for the free flow model: The naming for handling BJ(-S) boundary conditions has been adapted from isBJS() to isBeaversJoseph() / setBJS() to setBeaversJoseph(). In order to consider the velocity within the porous medium, the old velocityPorousMedium(element, scvf) method (returning a Scalar) has been renamed to porousMediumVelocity(element, scvf) (returning a velocity vector). The latter defaults to VelocityVector(0.0).

  • Van Genuchten: The VanGenuchten-Mualem material law now allows to set a parameter l (default to 0.5) which is sometimes fitted.

  • Runtime variable output precision e.g. Float64: The VtkOutputModule has been adapted to allow easy changes of the vtk output precision. It is now possible to specify output precision in the input file using Vtk.Precision followed by either Float32, Float64, UInt32, UInt8 or Int32. Float32 stays the default. We especially advice the use of Float64 when working with restart files. An additional new option is Vtk.CoordPrecision which changes the precision of the coordinates only and uses the default of Vtk.Precision.

  • Effective Laws and Diffusion Coefficients: The effective laws interface has been changed within !1684. The interface for these laws has been unified, and all coefficents are to be stored in containers that fit to the model. These quantities should then be added in the volumeVariables, meaning all effective quantities would be accessible from the volumevariables.

  • Examples: The documentation of the examples has been improved further, focusing on readability and convenience. Further, three additional examples are included the folder examples. To get an overview, point your browser to https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/tree/master/examples.

Immediate interface changes not allowing/requiring a deprecation period

  • Remove Grid.HeapSize as dune-ugrid removed the according feature as well.

  • Van Genuchten: Corrected VanGenuchten-Mualem exponent in the non-wetting saturation formula (1/3 instead of 1/2 (or l, see above))

  • Van Genuchten: Corrected VanGenuchten-Mualem implementation of dkrn/dSw

  • Brooks-Corey: Corrected Brooks-Corey implementation of dkrn/dSw and added the derivatives for the regularized version

  • AMGBackend: The internal structure of the AMGBackend and the ParallelISTLHelper has been overhauled, as only used by the AMG, we did not make the changes backwards-compatible

  • The global default parameters for linear solvers have been removed and moved to the class LinearSolver. This only affects users that directly obtain this parameter via getParam somewhere in the code.

  • Sequential linear solver backends: Remove template argument precondBlockLevel from solve functions. The preconditioner block level is now determined automatically, assuming a value of 1 for regular BCRS matrices and a value of 2 for MultiTypeBlock matrices. The respective calls from the NewtonSolver and PDESolverclasses have been adapted.

  • Change matrix block arrangement for staggered models: The matrix block structure has been adapted such that it complies with the literature standard, i.e., having the velocity block (A) on M[0][0] rather than on M[1][1]. This also requires re-arranging the submodels and properties in dumux-multidomain such that the face-related classes and vector entries now appear before the cell-centered ones.

M = \begin{pmatrix}
  D & C\\
  B & A
\end{pmatrix}

\qquad => \qquad

M = \begin{pmatrix}
    A & B\\
    C & D
    \end{pmatrix}

Backwards-compatibility can only be provided to a certain extent. The following changes need to made in the main file:

1.) change the order of the arguments for the assembler such that it reads:

auto assembler = std::make_shared<Assembler>(std::make_tuple(ffProblem, ffProblem, otherProblem, ...),
                                             std::make_tuple(ffGridGeometry->faceFVGridGeometryPtr(),
                                                             ffFvGridGeometry->cellCenterFVGridGeometryPtr(),
                                                             otherFvGridGeometry, ...),
                                             std::make_tuple(ffGridVariables->faceGridVariablesPtr(),
                                                             ffGridVariables->cellCenterGridVariablesPtr(),
                                                             otherGridVariables, ...),
                                             couplingManager,
                                             timeLoop, solOld);

// Not changing the arguments will yield a deprecation warning stating this hint but the code still compiles and runs.

2.) change the order of arguments in the partial function:

ffSol = partial(sol, ffFaceIdx, ffCellCenterIdx);

// Not changing the argument will rise a compiler error which makes the MR not fully backwards-compatible.

Regarding changes made to the effective laws and diffusionCoefficient containters, Backwards-compatibility is maintined for a large extent, barring any volumevariable classes defined externally that inherit from the non-isothermal volumevariables. If you use a self defined volumevariables class that inherits from the non-isothermal volumevariables, please adapt the your volumevariables class to fit to the non-isothermal volumevariables, and include the new methods for accessing the diffusion and effective diffusion coefficients.

  • Tracer model: tracer fluid systems do no longer provide a getMainComponent function since this simply doesn't make sense -- the main bulk component is not modeled.

Deprecated properties, to be removed after 3.2:

  • GridView: The property GridView has been deprecated and can be accessed via GridGeometry::GridView instead.

Deprecated classes/files, to be removed after 3.2:

  • AMGBackend: The class AMGBackend is deprecated and has been replaced by AMGBiCGSTABBackend which gets some different template arguments
  • AMGTraits: AMGTraits are deprecated, are to be replaced by LinearSolverTraits and restructured internally. As they were only used by the AMGBackend, we did not make the internal changes backwards-compatible

Deprecated member functions, to be removed after 3.2:

  • DiffusionCoefficient(various arguments): These coefficients are now defined in the volvars and stored in a container fit to the model. To access these values, use the unified c++ diffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx)
  • EffectiveDiffusivity(various arguments): These values are now defined in the volvars and stored in a container fit to the model. To access these values, use the unified c++ effectiveDiffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx)

Deleted classes/files, property names, constants/enums

Everything that has been deprecated before release 3.1 has been removed.