6th March 2013

OpenFOAM 2.2.0: Matrix Solvers

Vector-Coupled Solver

A block-matrix and solver framework is included in this release, allowing the coupled solution of vector, tensor and other multi-component entities. The coupled solution can be selected at run-time, through the fvSolution file, by a conversion algorithm that maps the standard segregated matrix form to the new block-matrix form for coupled solution. The user can select the coupled solution in the solvers entries in the fvSolution through a new, optional type keyword. The default option is the conventional segregated solution. An example entry for coupled solution of the U field is:

        type            coupled;  // optional, defaults to segregated
        solver          PBiCCCG;
        preconditioner  DILU;
        tolerance       (1e-05 1e-05 1e-05);
        relTol          (0 0 0);

In this example, where coupled is selected, the tolerance must be specified as a vector and the choice of solver includes coupled (C) forms of conventional solvers, e.g. PBiCICG:

Valid asymmetric matrix solvers are :

Block-coupled solution of vectors can provide performance benefits by taking advantage of the preconditioning of the matrix being the same for each component, particularly if the number of iterations for each component in the segregated solver are similar. The block-matrix structure can also be used to support implicit handling of sources which couple components, e.g. SRF, MRF, etc. although this requires some changes to the respective applications.


  • cavity with coupled velocity solution –

GAMG Solver

The GAMG solver includes the following new solvers/smoothers:

  • symGaussSeidel: symmetric Gauss-Seidel, which is “stronger” than the standard Gauss-Seidel but requires one additional sweep. This smoother can prove beneficial for some classes of problems, either as a smoother for GAMG or as a smooth solver.
  • FDIC: slightly faster implementation of the DIC smoother.

The following controls over the number of smoother pre- and post-sweeps have been added for the GAMG V-cycle to limit the communications overhead of smoothing the coarser levels:

  • nPreSweeps: number of pre-sweeps at first coarser level;
  • preSweepsLevelMultiplier: level multiplier for additional pre-sweeps at subsequent coarser levels;
  • maxPreSweeps: cut-off on the number of pre-sweeps;
  • nPostSweeps: number of post-sweeps at first coarser level;
  • postSweepsLevelMultiplier: level multiplier for additional post-sweeps at subsequent coarser levels;
  • maxPostSweeps: cut-off on the number of post-sweeps;
  • nFinestSweeps: number of sweeps at the finest level.

An optional first-order interpolation of the injected prolongation of the coarse correction into the finer level has been added. This is controlled with the interpolateCorrection entry which defaults to no. This can be beneficial if more aggressive agglomeration is used, but not cost-effective with pair-wise agglomeration without level-merging.