PBiCGStab: New preconditioned bi-conjugate gradient stabilized solver for asymmetric lduMatrices

using a run-time selectable preconditioner

References:
    Van der Vorst, H. A. (1992).
    Bi-CGSTAB: A fast and smoothly converging variant of Bi-CG
    for the solution of nonsymmetric linear systems.
    SIAM Journal on scientific and Statistical Computing, 13(2), 631-644.

    Barrett, R., Berry, M. W., Chan, T. F., Demmel, J., Donato, J.,
    Dongarra, J., Eijkhout, V., Pozo, R., Romine, C. & Van der Vorst, H.
    (1994).
    Templates for the solution of linear systems:
    building blocks for iterative methods
    (Vol. 43). Siam.

See also: https://en.wikipedia.org/wiki/Biconjugate_gradient_stabilized_method

Tests have shown that PBiCGStab with the DILU preconditioner is more
robust, reliable and shows faster convergence (~2x) than PBiCG with
DILU, in particular in parallel where PBiCG occasionally diverges.

This remarkable improvement over PBiCG prompted the update of all
tutorial cases currently using PBiCG to use PBiCGStab instead.  If any
issues arise with this update please report on Mantis: http://bugs.openfoam.org
This commit is contained in:
Henry Weller
2016-09-05 11:46:42 +01:00
parent fec5c063f5
commit c339d3018c
58 changed files with 481 additions and 102 deletions

View File

@ -19,7 +19,7 @@ solvers
{
T
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-06;
relTol 0;

View File

@ -49,7 +49,7 @@ solvers
"(b|Xi|ft|ha|hau|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-06;
relTol 0.1;
@ -57,7 +57,7 @@ solvers
"(b|Xi|ft|ha|hau|k|epsilon)Final"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-06;
relTol 0;

View File

@ -34,7 +34,7 @@ solvers
"(U|b|Su|Xi|ha|hau|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-05;
relTol 0.1;
@ -42,7 +42,7 @@ solvers
"(U|b|Su|Xi|ha|hau|k|epsilon)Final"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-05;
relTol 0;

View File

@ -19,7 +19,7 @@ solvers
{
Yi
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-12;
relTol 0;

View File

@ -19,7 +19,7 @@ solvers
{
Yi
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-12;
relTol 0;

View File

@ -19,7 +19,7 @@ solvers
{
Yi
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-12;
relTol 0;

View File

@ -19,7 +19,7 @@ solvers
{
Yi
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-12;
relTol 0;

View File

@ -19,7 +19,7 @@ solvers
{
Yi
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-12;
relTol 0;

View File

@ -49,7 +49,7 @@ solvers
"(U|Xi|hau|eau|ft|b|ha|ea|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-05;
relTol 0.1;

View File

@ -19,21 +19,21 @@ solvers
{
hf
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 0;
relTol 1e-3;
}
"(Uf|deltaf\*rhof)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-10;
relTol 0;
}
deltaf
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-10;
relTol 0;

View File

@ -57,7 +57,7 @@ solvers
"(U|Yi|h|k)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-8;
relTol 0.1;

View File

@ -26,7 +26,7 @@ solvers
"Yi"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-06;
relTol 0;

View File

@ -47,7 +47,7 @@ solvers
"(U|Yi|k|h|omega)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0.1;

View File

@ -26,7 +26,7 @@ solvers
"Yi"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-06;
relTol 0;

View File

@ -56,7 +56,7 @@ solvers
"(U|Yi|k|h|omega)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0.1;

View File

@ -48,7 +48,7 @@ solvers
"(U|Yi|k|h)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0.1;

View File

@ -39,7 +39,7 @@ solvers
"(U|h|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0.1;

View File

@ -38,7 +38,7 @@ solvers
"(U|h|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0.1;

View File

@ -39,7 +39,7 @@ solvers
"(U|h|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0.1;

View File

@ -39,7 +39,7 @@ solvers
"(U|h|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0.1;

View File

@ -19,7 +19,7 @@ solvers
{
p
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-06;
relTol 0.01;

View File

@ -19,7 +19,7 @@ solvers
{
p
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-06;
relTol 0.01;

View File

@ -24,7 +24,7 @@ solvers
"p.*"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-12;
relTol 0;

View File

@ -19,7 +19,7 @@ solvers
{
V
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-05;
relTol 0;

View File

@ -33,7 +33,7 @@ solvers
"(U|T|k|epsilon|R)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0.1;

View File

@ -27,7 +27,7 @@ solvers
"(U|T|k|epsilon|R)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-05;
relTol 0.1;

View File

@ -27,7 +27,7 @@ solvers
"(U|T|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-07;
relTol 0.1;

View File

@ -41,7 +41,7 @@ solvers
"(U|h|e|k|epsilon|R)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0.1;

View File

@ -29,7 +29,7 @@ solvers
"(U|h|k|epsilon|omega)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-8;
relTol 0.1;

View File

@ -29,7 +29,7 @@ solvers
"(U|h|k|epsilon|omega)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0.01;

View File

@ -29,7 +29,7 @@ solvers
"(U|h|k|epsilon|omega)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-8;
relTol 0.1;

View File

@ -27,7 +27,7 @@ solvers
"(U|h|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-05;
relTol 0.1;

View File

@ -37,7 +37,7 @@ solvers
"(U|h|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-05;
relTol 0.1;

View File

@ -50,7 +50,7 @@ solvers
"(U|h|k|epsilon|R)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0.1;

View File

@ -50,7 +50,7 @@ solvers
"(U|h|k|epsilon|R)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0.1;

View File

@ -43,7 +43,7 @@ solvers
"(U|h|k|epsilon|R)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0.1;

View File

@ -43,7 +43,7 @@ solvers
"(U|h|k|epsilon|R)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0.1;

View File

@ -31,7 +31,7 @@ solvers
"(U|h|e|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0.1;

View File

@ -30,7 +30,7 @@ solvers
"(U|h|e|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0.1;

View File

@ -36,7 +36,7 @@ solvers
"(U|h|k|epsilon|G|Ii)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0.1;

View File

@ -36,7 +36,7 @@ solvers
"(U|h|k|epsilon|G|Ii)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0.1;

View File

@ -18,10 +18,10 @@ solvers
{
p
{
solver GAMG;
tolerance 1e-7;
relTol 0.01;
smoother GaussSeidel;
solver GAMG;
smoother GaussSeidel;
tolerance 1e-7;
relTol 0.01;
}
Phi
@ -31,29 +31,29 @@ solvers
U
{
solver smoothSolver;
smoother GaussSeidel;
tolerance 1e-8;
relTol 0.1;
nSweeps 1;
solver smoothSolver;
smoother GaussSeidel;
tolerance 1e-8;
relTol 0.1;
nSweeps 1;
}
k
{
solver smoothSolver;
smoother GaussSeidel;
tolerance 1e-8;
relTol 0.1;
nSweeps 1;
solver smoothSolver;
smoother GaussSeidel;
tolerance 1e-8;
relTol 0.1;
nSweeps 1;
}
omega
{
solver smoothSolver;
smoother GaussSeidel;
tolerance 1e-8;
relTol 0.1;
nSweeps 1;
solver smoothSolver;
smoother GaussSeidel;
tolerance 1e-8;
relTol 0.1;
nSweeps 1;
}
}

View File

@ -70,14 +70,14 @@ solvers
"(h|Yi|O2|N2|H2O)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0;
}
hFinal
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0;

View File

@ -34,7 +34,7 @@ solvers
"(U|h|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-5;
relTol 0.1;

View File

@ -66,14 +66,14 @@ solvers
"(h|Yi|O2|N2|H2O)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0;
}
hFinal
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0;

View File

@ -19,14 +19,14 @@ solvers
{
"(Uf|hf|deltaf\*rhof)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-10;
relTol 0;
}
deltaf
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-10;
relTol 0;

View File

@ -64,7 +64,7 @@ solvers
"(Yi|O2|N2|H2O)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0;

View File

@ -65,7 +65,7 @@ solvers
"(Yi|O2|N2|H2O)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0;

View File

@ -69,7 +69,7 @@ solvers
"(Yi|O2|N2|H2O)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0;

View File

@ -64,7 +64,7 @@ solvers
"(Yi|O2|N2|H2O)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0;

View File

@ -27,7 +27,7 @@ solvers
U
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-05;
relTol 0;

View File

@ -59,9 +59,8 @@ solvers
"(U|k|epsilon)"
{
solver PBiCG;
solver PBiCGStab;
preconditioner DILU;
smoother symGaussSeidel;
tolerance 1e-7;
relTol 0.1;
minIter 1;

View File

@ -67,8 +67,8 @@ solvers
"(U|k|epsilon)"
{
solver smoothSolver;
smoother symGaussSeidel;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-6;
relTol 0.1;
}

View File

@ -59,8 +59,8 @@ solvers
"(U|k|epsilon)"
{
solver smoothSolver;
smoother symGaussSeidel;
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0.1;
minIter 1;