Skip to content

Why the SPAI0-BiCGSTAB outperforms AMG-BiCGSTAB for large scale problem? #283

@QuanchengP

Description

@QuanchengP

Dear developer, the AMGCL is a wonderful choice as the solver of elastic frictional contact problem (the SPAI0-BiCGSTAB in AMGCL outperforms the default BiCGSTAB in Eigen). As the left-handed matrix is square but not symmetric, the BiCGSTAB but not CG is chosen as solver (GMRES is compared and not chosen). It is unexpected that the SPAI0-BiCGSTAB outperforms AMG-BiCGSTAB for large scale problem.

Here, SPAI0-BiCGSTAB means "the solver is BiCGSTAB, the preconditioner is SPAI0"; the AMG-BiCGSTAB means "the solver is BiCGSTAB, the preconditioner is AMG". For AMG-BiCGSTAB, different relaxation schemes are already compared and the more efficient chebyshev relaxation is chosen.

The tested matrix, RHS and code are at: https://github.com/QuanchengP/DEHW/releases/download/v1.0.0/demo.zip (100Mb). The tested results are as follows:

(1) SPAI0-BiCGSTAB

Solver
======
Type: BiCGStab
Unknowns: 135368
Memory footprint: 7.23 M

Preconditioner
==============
Relaxation as preconditioner
Unknowns: 135368
Nonzeros: 11818846
Memory: 182.41 M

Iters: 202
Error: 6.37313e-15

[Frictional contact: 2.407 s] (100.00%)
[ setup: 0.031 s] ( 1.28%)
[ solve: 2.376 s] ( 98.71%)

(2) AMG-BiCGSTAB

Solver
======
Type: BiCGStab
Unknowns: 135368
Memory footprint: 7.23 M

Preconditioner
==============
Number of levels: 2
Operator complexity: 1.02
Grid complexity: 1.02
Memory footprint: 222.20 M

level unknowns nonzeros memory
---------------------------------------------
0 135368 11818846 209.54 M (98.21%)
1 2631 215441 12.65 M ( 1.79%)

Iters: 56
Error: 7.05585e-15

[Frictional contact: 9.376 s] (100.00%)
[ setup: 0.678 s] ( 7.23%)
[ solve: 8.698 s] ( 92.77%)

For smaller problems with unknows less than 10 thousand, AMG-BiCGSTAB slightly outperforms SPAI0-BiCGSTAB. For larger problems with unknowns more than one million, the advantages of SPAI0-BiCGSTAB becomes much more obvious.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions