2! This file is part of
MUMPS 5.5.1, released
3! on Tue
Jul 12 13:17:24 UTC 2022
9! This version of
MUMPS is provided to you free of charge. It is
10! released under
the CeCILL-C license
11! (see doc/CeCILL-C_V1-en.txt, doc/CeCILL-C_V1-fr.txt, and
14 INCLUDE
'zmumps_root.h'
18! This structure contains all parameters
19!
for the interface to
the user, plus internal
20! information from
the solver
32! Solver (
SYM=0 unsymmetric,
SYM=1 symmetric Positive Definite,
33!
SYM=2 general symmetric)
34! Type of parallelism (PAR=1 host working, PAR=0 host not working)
38! Order of Input matrix
42! ----------------------------------------
43! Assembled input matrix : User interface
44! ----------------------------------------
45 INTEGER :: NZ ! Standard integer input + bwd. compat.
47 COMPLEX(kind=8), DIMENSION(:), POINTER :: A
48 INTEGER, DIMENSION(:), POINTER :: IRN, JCN
51! ------------------------------------
52! Case of distributed assembled matrix
54! ------------------------------------
55 INTEGER :: NZ_loc ! Standard integer input + bwd. compat.
58 INTEGER, DIMENSION(:), POINTER :: IRN_loc, JCN_loc
59 COMPLEX(kind=8), DIMENSION(:), POINTER :: A_loc, pad2
61! ----------------------------------------
62! Unassembled input matrix: User interface
63! ----------------------------------------
65 INTEGER, DIMENSION(:), POINTER :: ELTPTR
66 INTEGER, DIMENSION(:), POINTER :: ELTVAR
67 COMPLEX(kind=8), DIMENSION(:), POINTER :: A_ELT, pad4
69! ---------------------------------------------
70! Symmetric permutation :
72! ---------------------------------------------
79 INTEGER, DIMENSION(:), POINTER :: BLKPTR
80 INTEGER, DIMENSION(:), POINTER :: BLKVAR
85! --------------------------------------------------------
88! right-hand side and solution
89! -------------------------------------------------------
90 COMPLEX(kind=8), DIMENSION(:), POINTER ::
RHS,
REDRHS
91 COMPLEX(kind=8), DIMENSION(:), POINTER :: RHS_SPARSE
92 COMPLEX(kind=8), DIMENSION(:), POINTER :: SOL_loc
93 COMPLEX(kind=8), DIMENSION(:), POINTER :: RHS_loc
94 INTEGER, DIMENSION(:), POINTER :: IRHS_SPARSE
95 INTEGER, DIMENSION(:), POINTER :: IRHS_PTR
96 INTEGER, DIMENSION(:), POINTER :: ISOL_loc
97 INTEGER, DIMENSION(:), POINTER :: IRHS_loc
98 INTEGER :: LRHS,
NRHS, NZ_RHS, Nloc_RHS, LRHS_loc, LREDRHS
100! ----------------------------
102! statistics and output data
103! ---------------------------
107 DOUBLE PRECISION :: COST_SUBTREES
109 DOUBLE PRECISION :: RINFO(40)
111! The options array
for metis/parmetis
113! ---------------------------------------------------------
114! Permutations computed during analysis:
116!
UNS_PERM: Column permutation (optional)
117! ---------------------------------------------------------
123 INTEGER :: NPROW, NPCOL, MBLOCK, NBLOCK
124 INTEGER :: SCHUR_MLOC, SCHUR_NLOC, SCHUR_LLD
126 COMPLEX(kind=8), DIMENSION(:), POINTER ::
SCHUR
127 COMPLEX(kind=8), DIMENSION(:), POINTER :: SCHUR_CINTERFACE
128 INTEGER, DIMENSION(:), POINTER :: LISTVAR_SCHUR
129! -------------------------------------
130! Case of distributed matrix on entry:
131! ZMUMPS potentially provides mapping
132! -------------------------------------
133 INTEGER, DIMENSION(:), POINTER :: MAPPING
137 CHARACTER(LEN=30) :: VERSION_NUMBER
141 CHARACTER(LEN=255) :: OOC_TMPDIR
142 CHARACTER(LEN=63) :: OOC_PREFIX
143! ------------------------------------------
144! Name of file to dump a matrix/rhs to disk
145! ------------------------------------------
146 CHARACTER(LEN=255) :: WRITE_PROBLEM
150 CHARACTER(LEN=255) :: SAVE_DIR
151 CHARACTER(LEN=255) :: SAVE_PREFIX
152 CHARACTER(LEN=7) :: pad7
155! **********************
156! INTERNAL Working data
157! *********************
158 INTEGER(8) :: KEEP8(150), MAX_SURF_MASTER
161 INTEGER :: COMM_NODES, MYID_NODES, COMM_LOAD
162 INTEGER :: MYID, NPROCS, NSLAVES
164! IS is used
for the factors + workspace
for contrib. blocks
165 INTEGER, DIMENSION(:), POINTER :: IS
167! The following data/arrays are computed during
the analysis
168! phase and used during
the factorization and solve phases.
171 INTEGER,POINTER,DIMENSION(:) :: STEP, NE_STEPS, ND_STEPS
172 INTEGER,POINTER,DIMENSION(:) :: FRERE_STEPS, DAD_STEPS
173 INTEGER,POINTER,DIMENSION(:) :: FILS, FRTPTR, FRTELT
174 INTEGER(8),POINTER,DIMENSION(:) :: PTRAR
175 INTEGER,POINTER,DIMENSION(:) :: NA, PROCNODE_STEPS
176! Info
for pruning tree
177 INTEGER,POINTER,DIMENSION(:) :: Step2node
178! PTLUST_S and PTRFAC are two pointer arrays computed during
179! factorization and used by
the solve
180 INTEGER, DIMENSION(:), POINTER :: PTLUST_S
181 INTEGER(8), DIMENSION(:), POINTER :: PTRFAC
182!
main real working arrays
for factorization/solve phases
183 COMPLEX(kind=8), DIMENSION(:), POINTER :: S
184! Information on mapping
185 INTEGER, DIMENSION(:), POINTER :: PROCNODE
186! Input matrix ready
for numerical assembly
187! -arrowhead format in case of assembled matrix
188! -element format otherwise
189 INTEGER, DIMENSION(:), POINTER :: INTARR
190 COMPLEX(kind=8), DIMENSION(:), POINTER :: DBLARR
191! Element entry: internal data
193 INTEGER, DIMENSION(:), POINTER :: ELTPROC
195 INTEGER, DIMENSION(:,:), POINTER :: CANDIDATES
196 INTEGER, DIMENSION(:), POINTER :: ISTEP_TO_INIV2
197 INTEGER, DIMENSION(:), POINTER :: FUTURE_NIV2
198 INTEGER, DIMENSION(:,:), POINTER :: TAB_POS_IN_PERE
199 LOGICAL, DIMENSION(:), POINTER :: I_AM_CAND
200! For heterogeneous architecture
201 INTEGER, DIMENSION(:), POINTER :: MEM_DIST
203 INTEGER, DIMENSION(:), POINTER :: POSINRHSCOMP_ROW
204 LOGICAL :: POSINRHSCOMP_COL_ALLOC, pad11
205 INTEGER, DIMENSION(:), POINTER :: POSINRHSCOMP_COL
206 COMPLEX(kind=8), DIMENSION(:), POINTER :: RHSCOMP
207! Info on
the subtrees to be used during factorization
208 DOUBLE PRECISION, DIMENSION(:), POINTER :: MEM_SUBTREE
209 DOUBLE PRECISION, DIMENSION(:), POINTER :: COST_TRAV
210 INTEGER, DIMENSION(:), POINTER :: MY_ROOT_SBTR
211 INTEGER, DIMENSION(:), POINTER :: MY_FIRST_LEAF
212 INTEGER, DIMENSION(:), POINTER :: MY_NB_LEAF
213 INTEGER, DIMENSION(:), POINTER :: DEPTH_FIRST
214 INTEGER, DIMENSION(:), POINTER :: DEPTH_FIRST_SEQ
215 INTEGER, DIMENSION(:), POINTER :: SBTR_ID
216 INTEGER, DIMENSION(:), POINTER :: SCHED_DEP
217 INTEGER, DIMENSION(:), POINTER :: SCHED_GRP
218 INTEGER, DIMENSION(:), POINTER :: SCHED_SBTR
219 INTEGER, DIMENSION(:), POINTER :: CROIX_MANU
220 COMPLEX(kind=8), DIMENSION(:), POINTER :: WK_USER
223! Internal control array
225! For simulating parallel out-of-core stack.
226 DOUBLE PRECISION, DIMENSION(:),POINTER :: CB_SON_SIZE
227! Instance number used/managed by
the C/F77 interface
229! OOC management data that must persist from factorization to solve.
230 INTEGER :: OOC_MAX_NB_NODES_FOR_ZONE
231 INTEGER, DIMENSION(:,:), POINTER :: OOC_INODE_SEQUENCE
232 INTEGER(8),DIMENSION(:,:), POINTER :: OOC_SIZE_OF_BLOCK
233 INTEGER(8), DIMENSION(:,:), POINTER :: OOC_VADDR
234 INTEGER,DIMENSION(:), POINTER :: OOC_TOTAL_NB_NODES
235 INTEGER,DIMENSION(:), POINTER :: OOC_NB_FILES
236 INTEGER :: OOC_NB_FILE_TYPE,pad12
237 INTEGER,DIMENSION(:), POINTER :: OOC_FILE_NAME_LENGTH
238 CHARACTER,DIMENSION(:,:), POINTER :: OOC_FILE_NAMES
239! Indices of nul pivots
241! Array needed to manage additionnal candidate processor
242 INTEGER, DIMENSION(:,:), POINTER :: SUP_PROC, pad14
243! Lists of nodes where processors work. Built/used in solve phase.
244 INTEGER, DIMENSION(:), POINTER :: IPTR_WORKING, WORKING
245! Root structure(internal)
248 INTEGER, POINTER, DIMENSION(:) :: LRGROUPS
250! Pointer encoding
for FDM_F data
251 CHARACTER, DIMENSION(:), POINTER :: FDM_F_ENCODING
252! Pointer array encoding BLR factors pointers
253 CHARACTER, DIMENSION(:), POINTER :: BLRARRAY_ENCODING
255 TYPE(ZMUMPS_L0OMPFAC_T),DIMENSION(:),POINTER :: L0_OMP_FACTORS
256 INTEGER :: LPOOL_A_L0_OMP, LPOOL_B_L0_OMP
259 INTEGER :: LL0_OMP_MAPPING, LL0_OMP_FACTORS
261! Estimates before L0_OMP
262 INTEGER, DIMENSION(:,:), POINTER :: I4_L0_OMP
263 INTEGER(8), DIMENSION(:,:), POINTER :: I8_L0_OMP
265 INTEGER, DIMENSION(:), POINTER :: IPOOL_B_L0_OMP
267 INTEGER, DIMENSION(:), POINTER :: IPOOL_A_L0_OMP
269 INTEGER, DIMENSION(:), POINTER :: PHYS_L0_OMP
270! Amalgamated subtrees
271 INTEGER, DIMENSION(:), POINTER :: VIRT_L0_OMP
272! Mapping of amalgamated subtrees
273 INTEGER, DIMENSION(:), POINTER :: VIRT_L0_OMP_MAPPING
274! From heaviest to lowest subtree
275 INTEGER, DIMENSION(:), POINTER :: PERM_L0_OMP
276! To get leafs in global pool
277 INTEGER, DIMENSION(:), POINTER :: PTR_LEAFS_L0_OMP
278! Mapping of
the subtree nodes
279 INTEGER, DIMENSION(:), POINTER :: L0_OMP_MAPPING
280! Mpi to omp - mumps agile
281 INTEGER, DIMENSION(:), POINTER :: MPITOOMP_PROCS_MAP
283 DOUBLE PRECISION, DIMENSION(:), POINTER :: SINGULAR_VALUES
286! To know
if OOC files are associated to a saved and so
if they should be removed.
287 LOGICAL :: ASSOCIATED_OOC_FILES
288 END
TYPE ZMUMPS_STRUC
!This file is part of MUMPS
!This file is part of released !on Tue ENS INP !Mumps Technologies
!This file is part of released !on Tue ENS INP Toulouse
!This file is part of released !on Tue ENS Lyon
!This file is part of released !on Tue Jul
!This file is part of released !on Tue ENS INP Inria
!This file is part of released !on Tue CNRS
if(complex_arithmetic) id
end diagonal values have been computed in the(sparse) matrix id.SOL
we set the rigth hand side id RHS
for(i8=*sizetab-1;i8 >=0;i8--)
int main(int argc, char *argv[])