Gong,
Iterative refinement might help, i.e., more than one MatSolve ( LU x = b) is 
applied. If you use superlu_dist, this operation can be activated at runtime by 
the option '-pc_type lu -pc_factor_mat_solver_type superlu_dist 
-mat_superlu_dist_iterrefine' (run your code withe '-help' for available 
options).

Using mumps, the iterative refinement can be activated by
-mat_mumps_icntl_10: <now 0 : formerly 0>: ICNTL(10): max num of refinements 
(None)
i.e., '-mat_mumps_icntl_10 1' applies one refinement.

I suspect the LU solver would be called again if one MatSolve() does not reach 
the required tolerance. Check your runs with '-snes_monitor -ksp_monitor' to 
get more understanding.
Hong

________________________________
From: petsc-users <[email protected]> on behalf of Gong Ding 
<[email protected]>
Sent: Thursday, September 14, 2023 10:29 PM
To: Barry Smith <[email protected]>
Cc: [email protected] <[email protected]>
Subject: Re: [petsc-users] Is precondition works for ill-conditioned jacobian 
matrix


The matrix has a bad condition number, but not singular. It comes from real 
physical problem and the floating zone is weekly controlled by remote boundary 
condition.

Yes, I am also afraid that with 64 bit floating number, the matrix is 
numerically singular since the construction of jacaobian has already lost 
precision.

Anyway, I can build the jacobian at 128 bit precision and then truncate to 64 
bit. Our solution x and function f can also be evaluated at 128 bit precision.

The main purpose is, always do LU factorization at 64 bit for performance issue.

Method 1 tries to "precondition" a direct solver. I don't know if possible.

Method 2 wants to use post refinement to improve the accuracy of a direct 
solver. Theoretically, I think it should work.


On 2023/9/15 01:37, Barry Smith wrote:

  Method 1 and 2 are unlikely to work.

  It sounds like your matrix is (in exact precision) singular, but using 128 
bit floats allows a "stable" factorization to go through giving you a descent 
direction for Newton.

  I think you really need to fix the singularity at the modeling level, it is 
not robust to fix it at the numerical algorithm level. If you know the exact 
form of the null spaces you can use MatSetNullSpace() but you cannot use a 
direct solver for the system since the factorization will still see the 
singular matrix.

   Barry


On Sep 14, 2023, at 12:30 PM, Gong Ding 
<[email protected]><mailto:[email protected]> wrote:

The physical problem itself is ill-conditioned since there are floating regions 
in the simulation domain.
I use MUMPS as 64 bit LU solver, and a special improved SuperLU as 128 bit LU 
solver (https://github.com/cogenda/superlu, added float128 support).
Although 128 bit solver works, it is 10x slower.

I'd like to try, if  jacobian can be processed under 64 bit precision while 
keeps the Newton iteration convergence.


Method 1:
Use a block inversion of the main diagonal of jacobian as preconditioner  (or 
ILU? ). Then factorize M*J.
Both the precondition matrix and jacobian matrix are 64 bit.

Method 2:
Do a 64 bit LU factorization of jacobian matrix, and use the factorization 
result as a preconditioner for higher precision krylov solver (such as 
iterative refinement)



On 2023/9/14 23:05, Zhang, Hong wrote:
Gong Ding,
When you use a LU solver, the preconditioner M = inv(LU) = inv (J) on theory. I 
suspect your jacobian evaluation by 64bit might be inaccurate. What LU solver 
did you use? Run your code with option '-snes_view -snes_monitor -ksp_monitor' 
and compare the displays.
Hong
________________________________
From: petsc-users 
<[email protected]><mailto:[email protected]> on 
behalf of Mark Adams <[email protected]><mailto:[email protected]>
Sent: Thursday, September 14, 2023 5:35 AM
To: Gong Ding <[email protected]><mailto:[email protected]>
Cc: [email protected]<mailto:[email protected]> 
<[email protected]><mailto:[email protected]>
Subject: Re: [petsc-users] Is precondition works for ill-conditioned jacobian 
matrix

I would first verify that you are happy with the solution that works.

Next, I would worry about losing accuracy in computing M*J, but you could try 
it and search for any related work. There may be some tricks.

And MUMPS is good at high accuracy, you might try that and if it fails look at 
the MUMPS docs for any flags for high-accuracy.

Good luck,
Mark

On Thu, Sep 14, 2023 at 5:35 AM Gong Ding 
<[email protected]<mailto:[email protected]>> wrote:
Hi all

I find such a nonlinear problem, the jacobian matrix is ill conditioned.

Solve the jacobian matrix by 64bit LU  solver, the Newton method failed
to convergence.

However, when solve the jacobian matrix by 128bit LU solver , Newton
iteration will convergence.

I think this phenomena indicate that , the jacobian matrix is ill
conditioned.


The question is, if I do a precondition as M*J*dx = -M*f(x), here M is
the precondition matrix, . then I solve the matrix A=M*J by a LU solver.

Can I expect that solve A=M*J has a better precision result that help
the convergence of Newton iteration?

Gong Ding

Reply via email to