How to find the determinant or condition number of the stiffness matrix?

Hi,profeesor How to find the determinant or condition number of the stiffness matrix?

You can use MUMPS, see MATSOLVERMUMPS mat_mumps_icntl_33 for the determinant. For the condition number, you can use SLEPc or ARPACK, or if the problem is not too ill-conditioned, -ksp_monitor_singular_value.

Be careful with the boundary condition, the tgv technique break the condition number .
And The example eigen/condition-number.edp given an example:
condition-number.edp (718 Bytes)

Hi,professor, I used the following command,
set(dA, sparams ="-pc_factor_mat_solver_type superlu -mat_mumps_icntl_33");
but how do I output this determinant?

You need to use MUMPS, not SuperLU. The determinant is displayed if you further add -ksp_view.

Hi,professor, I used the following command, but there is no determinant,why?
set(A, sparams ="-pc_factor_mat_solver_type mumps -mat_mumps_icntl_33 -ksp_view_determinant");

What is -ksp_view_determinant?

I want to output determinants, but I use the following command to output conditional numbers,why? The command “mumps -mat_mumps_icntl_33 " should the determinant.
set(A, sparams =”-pc_factor_mat_solver_type mumps -mat_mumps_icntl_33 -ksp_view_singularvalues")

Why are you not using the flag I told you to use in the first place?

Hi, however, I used the command
set(A, sparams ="-pc_factor_mat_solver_type mumps -mat_mumps_icntl_33 -ksp_view"), but Still there is any output about the determinant.

This is what I get, for example running diffusion-2d-PETSc.edp from examples/hpddm:

[...]
              RINFOG(3) (global estimated flops for the elimination after factorization): 1.93421e+06 
              (RINFOG(12) RINFOG(13))*2^INFOG(34) (determinant): (0.713452,0.)*(2^6709)
              INFOG(3) (estimated real workspace for factors on all processors after analysis): 65153
[...]

Determinant is the second line in the above snippet.

1 Like

Hello, I tried some examples from> examples/hpddm
, but I still didn’t output the result of determinant. The output content is basically as follows. Why?

C:\Users\weiqi>FreeFem+±mpi stokes-2d-PETSc.edp -v 0
KSP Object: 1 MPI processes
type: gmres
restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement
happy breakdown tolerance 1e-30
maximum iterations=10000, initial guess is zero
tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
left preconditioning
using PRECONDITIONED norm type for convergence test
PC Object: 1 MPI processes
type: bjacobi
number of blocks = 1
Local solver information for first block is in the following KSP and PC objects on rank 0:
Use -ksp_view ::ascii_info_detail to display information for all blocks
KSP Object: (sub_) 1 MPI processes
type: preonly
maximum iterations=10000, initial guess is zero
tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
left preconditioning
using NONE norm type for convergence test
PC Object: (sub_) 1 MPI processes
type: ilu
out-of-place factorization
0 levels of fill
tolerance for zero pivot 2.22045e-14
matrix ordering: natural
factor fill ratio given 1., needed 1.
Factored matrix follows:
Mat Object: 1 MPI processes
type: seqaij
rows=22203, cols=22203
package used to perform factorization: petsc
total: nonzeros=647409, allocated nonzeros=647409
using I-node routines: found 9835 nodes, limit used is 5
linear system matrix = precond matrix:
Mat Object: (sub_) 1 MPI processes
type: seqaij
rows=22203, cols=22203
total: nonzeros=647409, allocated nonzeros=647409
total number of mallocs used during MatSetValues calls=0
using I-node routines: found 9835 nodes, limit used is 5
linear system matrix = precond matrix:
Mat Object: 1 MPI processes
type: mpiaij
rows=22203, cols=22203
total: nonzeros=647409, allocated nonzeros=647409
total number of mallocs used during MatSetValues calls=0
using I-node (on process 0) routines: found 9835 nodes, limit used is 5

You are not using the proper preconditioner (-pc_type).

Hello, professor, I still don’t quite understand what you mean. Could you please explain it in detail?

Explain what? -pc_type and -ksp_view are explained in the screencast I sent earlier.

Thank you. I see what you mean, but the determinant (examples/hpddm/bilaplace-2d-PETSc.edp)is (0, 0) * (2 ^ 0),why?

C:\Users\weiqi>FreeFem+±mpi bilaplace-2d-PETSc.edp -v 0
KSP Object: 1 MPI processes
type: gmres
restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement
happy breakdown tolerance 1e-30
maximum iterations=10000, initial guess is zero
tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
left preconditioning
using PRECONDITIONED norm type for convergence test
PC Object: 1 MPI processes
type: cholesky
out-of-place factorization
tolerance for zero pivot 2.22045e-14
matrix ordering: external
factor fill ratio given 0., needed 0.
Factored matrix follows:
Mat Object: 1 MPI processes
type: mumps
rows=6561, cols=6561
package used to perform factorization: mumps
total: nonzeros=201780, allocated nonzeros=201780
MUMPS run parameters:
SYM (matrix type): 2
PAR (host participation): 1
ICNTL(1) (output for error): 6
ICNTL(2) (output of diagnostic msg): 0
ICNTL(3) (output for global info): 0
ICNTL(4) (level of printing): 0
ICNTL(5) (input mat struct): 0
ICNTL(6) (matrix prescaling): 7
ICNTL(7) (sequential matrix ordering):7
ICNTL(8) (scaling strategy): 77
ICNTL(10) (max num of refinements): 0
ICNTL(11) (error analysis): 0
ICNTL(12) (efficiency control): 0
ICNTL(13) (sequential factorization of the root node): 0
ICNTL(14) (percentage of estimated workspace increase): 20
ICNTL(18) (input mat struct): 0
ICNTL(19) (Schur complement info): 0
ICNTL(20) (RHS sparse pattern): 0
ICNTL(21) (solution struct): 0
ICNTL(22) (in-core/out-of-core facility): 0
ICNTL(23) (max size of memory can be allocated locally):0
ICNTL(24) (detection of null pivot rows): 0
ICNTL(25) (computation of a null space basis): 0
ICNTL(26) (Schur options for RHS or solution): 0
ICNTL(27) (blocking size for multiple RHS): -32
ICNTL(28) (use parallel or sequential ordering): 1
ICNTL(29) (parallel ordering): 0
ICNTL(30) (user-specified set of entries in inv(A)): 0
ICNTL(31) (factors is discarded in the solve phase): 0
ICNTL(33) (compute determinant): 0
ICNTL(35) (activate BLR based factorization): 0
ICNTL(36) (choice of BLR factorization variant): 0
ICNTL(38) (estimated compression rate of LU factors): 333
CNTL(1) (relative pivoting threshold): 0.01
CNTL(2) (stopping criterion of refinement): 1.49012e-08
CNTL(3) (absolute pivoting threshold): 0.
CNTL(4) (value of static pivoting): -1.
CNTL(5) (fixation for null pivots): 0.
CNTL(7) (dropping parameter for BLR): 0.
RINFO(1) (local estimated flops for the elimination after analysis):
[0] 1.1037e+07
RINFO(2) (local estimated flops for the assembly after factorization):
[0] 339313.
RINFO(3) (local estimated flops for the elimination after factorization):
[0] 1.1037e+07
INFO(15) (estimated size of (in MB) MUMPS internal data for running numerical factorization):
[0] 4
INFO(16) (size of (in MB) MUMPS internal data used during numerical factorization):
[0] 4
INFO(23) (num of pivots eliminated on this processor after factorization):
[0] 6561
RINFOG(1) (global estimated flops for the elimination after analysis): 1.1037e+07
RINFOG(2) (global estimated flops for the assembly after factorization): 339313.
RINFOG(3) (global estimated flops for the elimination after factorization): 1.1037e+07
(RINFOG(12) RINFOG(13))2^INFOG(34) (determinant): (0.,0.)(2^0)
INFOG(3) (estimated real workspace for factors on all processors after analysis): 228803
INFOG(4) (estimated integer workspace for factors on all processors after analysis): 121006
INFOG(5) (estimated maximum front size in the complete tree): 144
INFOG(6) (number of nodes in the complete tree): 2392
INFOG(7) (ordering option effectively used after analysis): 2
INFOG(8) (structural symmetry in percent of the permuted matrix after analysis): 100
INFOG(9) (total real/complex workspace to store the matrix factors after factorization): 228803
INFOG(10) (total integer space store the matrix factors after factorization): 121006
INFOG(11) (order of largest frontal matrix after factorization): 144
INFOG(12) (number of off-diagonal pivots): 0
INFOG(13) (number of delayed pivots after factorization): 0
INFOG(14) (number of memory compress after factorization): 0
INFOG(15) (number of steps of iterative refinement after solution): 0
INFOG(16) (estimated size (in MB) of all MUMPS internal data for factorization after analysis: value on the most memory consuming processor): 4
INFOG(17) (estimated size of all MUMPS internal data for factorization after analysis: sum over all processors): 4
INFOG(18) (size of all MUMPS internal data allocated during factorization: value on the most memory consuming processor): 4
INFOG(19) (size of all MUMPS internal data allocated during factorization: sum over all processors): 4
INFOG(20) (estimated number of entries in the factors): 201780
INFOG(21) (size in MB of memory effectively used during factorization - value on the most memory consuming processor): 4
INFOG(22) (size in MB of memory effectively used during factorization - sum over all processors): 4
INFOG(23) (after analysis: value of ICNTL(6) effectively used): 0
INFOG(24) (after analysis: value of ICNTL(12) effectively used): 1
INFOG(25) (after factorization: number of pivots modified by static pivoting): 0
INFOG(28) (after factorization: number of null pivots encountered): 0
INFOG(29) (after factorization: effective number of entries in the factors (sum over all processors)): 201780
INFOG(30, 31) (after solution: size in Mbytes of memory used during solution phase): 3, 3
INFOG(32) (after analysis: type of analysis done): 1
INFOG(33) (value used for ICNTL(8)): 7
INFOG(34) (exponent of the determinant if determinant is requested): 0
INFOG(35) (after factorization: number of entries taking into account BLR factor compression - sum over all processors): 201780
INFOG(36) (after analysis: estimated size of all MUMPS internal data for running BLR in-core - value on the most memory consuming processor): 0
INFOG(37) (after analysis: estimated size of all MUMPS internal data for running BLR in-core - sum over all processors): 0
INFOG(38) (after analysis: estimated size of all MUMPS internal data for running BLR out-of-core - value on the most memory consuming processor): 0
INFOG(39) (after analysis: estimated size of all MUMPS internal data for running BLR out-of-core - sum over all processors): 0
linear system matrix = precond matrix:
Mat Object: 1 MPI processes
type: mpiaij
rows=6561, cols=6561
total: nonzeros=74241, allocated nonzeros=74241
total number of mallocs used during MatSetValues calls=0
not using I-node (on process 0) routines

Here is what I get with -mat_mumps_icntl_33 1:

              (RINFOG(12) RINFOG(13))*2^INFOG(34) (determinant): (0.622873,0.)*(2^79647)

On line 26 of this code, re-enter the following language:

set(A, sparams = “-pc_type cholesky -pc_factor_mat_solver_type mumps -mat_mumps_icntl_33 -ksp_view”);

next, Enter the following command in the command window

C:\Users\weiqi>FreeFem+±mpi bilaplace-2d-PETSc.edp -v 0

It is -mat_mumps_icntl_33 1, you are missing the one.

1 Like

Thank you very much indeed. It’s very patient of you. Thank you