Mark's suggestion will definitely help a lot.  Remove the displacement bc equations or include them in the matrix by zeroing out the row and putting a 1 on the diagonal.  The Lagrange multiplier will cause grief.

On 8/20/21 11:21 AM, Mark Adams wrote:
Constraints are a pain with scalable/iterative solvers. If you order the constraints last then ILU should work as well as it can work, but AMG gets confused by the constraint equations. You could look at PETSc's Stokes solvers, but it would be best if you could remove the constrained equations from your system if they are just simple point wise BC's.
Mark

On Fri, Aug 20, 2021 at 8:53 AM Наздрачёв Виктор <[email protected] <mailto:[email protected]>> wrote:

    *Hello, dear PETSc team!*

    I have a 3D elasticity with heterogeneous properties problem.
    There is unstructured grid with aspect ratio varied from 4 to 25.
    Dirichlet BCs (bottom zero displacements) are imposed via linear
    constraint equations using Lagrange multipliers. Also, Neumann
    (traction) BCs are imposed on side edges of mesh. Gravity load is
    also accounted for.

    I can solve this problem with *dgmres solver* and *ILU* as a
    *preconditioner*. But ILU doesn`t support parallel computing, so I
    decided to use Euclid or Boomeramg as a preconditioner. The issue
    is in slow convergence and high memory consumption, much higher,
    than for ILU.

    E.g., for source matrix size 2.14 GB with *ILU-0
    preconditioning* memory consumption is about 5.9 GB, and the
    process converges due to 767 iterations, and with *Euclid-0
    preconditioning* memory consumption is about 8.7 GB, and the
    process converges due to 1732 iterations.

    One of the following preconditioners is currently in use: *ILU-0,
    ILU-1, Hypre (Euclid), Hypre (boomeramg)*.

    As a result of computations */(logs and memory logs are
    attached)/*, the following is established for preconditioners:

    1. *ILU-0*: does not always provide convergence (or provides, but
    slow); uses an acceptable amount of RAM; does not support parallel
    computing.

    2. *ILU-1*: stable; memory consumption is much higher than that of
    ILU-0; does not support parallel computing.

    3. *Euclid*: provides very slow convergence, calculations are
    performed several times slower than for ILU-0; memory consumption
    greatly exceeds both ILU-0 and ILU-1; supports parallel computing.
    Also “drop tolerance” doesn’t provide enough accuracy in some
    cells, so I don’t use it.

    4. *Boomeramg*: provides very slow convergence, calculations are
    performed several times slower than for ILU-0; memory consumption
    greatly exceeds both ILU-0 and ILU-1; supports parallel computing.

    In this regard, the following questions arose:

    1. Is this behavior expected for HYPRE in computations with 1 MPI
    process? If not, is that problem can be related to *PETSc* or *HYPRE*?

    2. Hypre (Euclid) has much fewer parameters than ILU. Among them
    is the factorization level *"-pc_hypre_euclid_level <now -2:
    formerly -2>: Factorization levels (None)"* and its default value
    looks very strange, moreover, it doesn’t matter what factor is
    chosen -2, -1 or 0. Could it be that the parameter is confused
    with Column pivot tolerance in ILU - *"-pc_factor_column_pivot
    <-2.: -2.>: Column pivot tolerance (used only for some
    factorization) (PCFactorSetColumnPivot)"*?

    3. What preconditioner would you recommend to: optimize
    *convergence*, *memory* consumption, add *parallel computing*?

    4. How can we theoretically estimate memory costs with *ILU,
    Euclid, Boomeramg*?

    5. At what stage are memory leaks most likely?

    In any case, thank you so much for your attention! Will be
    grateful for any response.

    Kind regards,
    Viktor Nazdrachev
    R&D senior researcher
    Geosteering Technologies LLC


Reply via email to