109
105
! right-hand side and solution
110
106
! -------------------------------------------------------
111
COMPLEX*16, DIMENSION(:), POINTER :: RHS, REDRHS
112
COMPLEX*16, DIMENSION(:), POINTER :: RHS_SPARSE
113
COMPLEX*16, DIMENSION(:), POINTER :: SOL_LOC
114
INTEGER, DIMENSION(:), POINTER :: IRHS_SPARSE
115
INTEGER, DIMENSION(:), POINTER :: IRHS_PTR
116
INTEGER, DIMENSION(:), POINTER :: ISOL_LOC
117
INTEGER LRHS, NRHS, NZ_RHS, LSOL_LOC, LREDRHS
107
COMPLEX*16, DIMENSION(:), POINTER :: RHS, REDRHS
108
COMPLEX*16, DIMENSION(:), POINTER :: RHS_SPARSE
109
COMPLEX*16, DIMENSION(:), POINTER :: SOL_LOC
110
INTEGER, DIMENSION(:), POINTER :: IRHS_SPARSE
111
INTEGER, DIMENSION(:), POINTER :: IRHS_PTR
112
INTEGER, DIMENSION(:), POINTER :: ISOL_LOC
113
INTEGER LRHS, NRHS, NZ_RHS, LSOL_LOC, LREDRHS
119
115
! ----------------------------
120
116
! Control parameters,
121
117
! statistics and output data
122
118
! ---------------------------
126
DOUBLE PRECISION COST_SUBTREES
127
DOUBLE PRECISION CNTL(15)
128
DOUBLE PRECISION RINFO(20)
129
DOUBLE PRECISION RINFOG(20)
122
DOUBLE PRECISION COST_SUBTREES
123
DOUBLE PRECISION CNTL(15)
124
DOUBLE PRECISION RINFO(20)
125
DOUBLE PRECISION RINFOG(20)
130
126
! ---------------------------------------------------------
131
127
! Permutations computed during analysis:
132
! SYM_PERM: Symmetric permutation
133
! UNS_PERM: Column permutations (optionnal)
128
! SYM_PERM: Symmetric permutation
129
! UNS_PERM: Column permutations (optionnal)
134
130
! ---------------------------------------------------------
135
INTEGER, DIMENSION(:), POINTER :: SYM_PERM, UNS_PERM
131
INTEGER, DIMENSION(:), POINTER :: SYM_PERM, UNS_PERM
137
133
! -------------------------------------
138
134
! Case of distributed matrix on entry:
139
135
! ZMUMPS potentially provides mapping
140
136
! -------------------------------------
141
INTEGER, DIMENSION(:), POINTER :: MAPPING
137
INTEGER, DIMENSION(:), POINTER :: MAPPING
143
139
! -------------------------------
144
140
! Deficiency and null space basis
145
141
! -------------------------------
146
COMPLEX*16, DIMENSION(:,:), POINTER :: NULL_SPACE
147
INTEGER Deficiency, pad6
142
COMPLEX*16, DIMENSION(:,:), POINTER :: NULL_SPACE
143
INTEGER Deficiency, pad6
151
INTEGER NPROW, NPCOL, MBLOCK, NBLOCK
152
INTEGER SCHUR_MLOC, SCHUR_NLOC, SCHUR_LLD
154
INTEGER, DIMENSION(:), POINTER :: LISTVAR_SCHUR
155
COMPLEX*16, DIMENSION(:), POINTER :: SCHUR
156
COMPLEX*16, DIMENSION(:), POINTER :: SCHUR_CINTERFACE
147
INTEGER NPROW, NPCOL, MBLOCK, NBLOCK
148
INTEGER SCHUR_MLOC, SCHUR_NLOC, SCHUR_LLD
150
INTEGER, DIMENSION(:), POINTER :: LISTVAR_SCHUR
151
COMPLEX*16, DIMENSION(:), POINTER :: SCHUR
152
COMPLEX*16, DIMENSION(:), POINTER :: SCHUR_CINTERFACE
160
CHARACTER(LEN=14) VERSION_NUMBER
156
CHARACTER(LEN=14) VERSION_NUMBER
164
CHARACTER(LEN=255) :: OOC_TMPDIR
165
CHARACTER(LEN=63) :: OOC_PREFIX
160
CHARACTER(LEN=255) :: OOC_TMPDIR
161
CHARACTER(LEN=63) :: OOC_PREFIX
166
162
! ------------------------------------------
167
163
! To save the matrix in matrix market format
168
164
! ------------------------------------------
169
CHARACTER(LEN=255) WRITE_PROBLEM
165
CHARACTER(LEN=255) WRITE_PROBLEM
172
168
! **********************
173
169
! INTERNAL Working data
174
! **********************
177
INTEGER COMM_NODES, MYID_NODES, COMM_LOAD
178
INTEGER MYID, NPROCS, NSLAVES
180
INTEGER, DIMENSION(:), POINTER :: POIDS
183
INTEGER, DIMENSION(:), POINTER :: BUFR
184
! For analysis/facto/solve phases
188
! IS is used for the factors + workspace for contrib. blocks
189
INTEGER, DIMENSION(:), POINTER :: IS
190
! is1 (maxis1) contains working arrays computed
191
! and used only during analysis
192
INTEGER, DIMENSION(:), POINTER :: IS1
193
! The following data/arrays are computed during the analysis
194
! phase and used during the factorization and solve phases.
197
INTEGER,POINTER,DIMENSION(:)::STEP, NE_STEPS, ND_STEPS
170
! *********************
173
INTEGER COMM_NODES, MYID_NODES, COMM_LOAD
174
INTEGER MYID, NPROCS, NSLAVES
176
INTEGER, DIMENSION(:), POINTER :: POIDS
179
INTEGER, DIMENSION(:), POINTER :: BUFR
180
! For analysis/facto/solve phases
184
! IS is used for the factors + workspace for contrib. blocks
185
INTEGER, DIMENSION(:), POINTER :: IS
186
! is1 (maxis1) contains working arrays computed
187
! and used only during analysis
188
INTEGER, DIMENSION(:), POINTER :: IS1
189
! The following data/arrays are computed during the analysis
190
! phase and used during the factorization and solve phases.
193
INTEGER,POINTER,DIMENSION(:)::STEP, NE_STEPS, ND_STEPS
198
194
! Info for pruning tree
199
INTEGER,POINTER,DIMENSION(:)::Step2node
195
INTEGER,POINTER,DIMENSION(:)::Step2node
200
196
! ---------------------
201
INTEGER,POINTER,DIMENSION(:)::FRERE_STEPS, DAD_STEPS
202
INTEGER,POINTER,DIMENSION(:)::FILS, PTRAR, FRTPTR, FRTELT
203
INTEGER,POINTER,DIMENSION(:)::NA, PROCNODE_STEPS
204
! The two pointer arrays computed in facto and used by the solve
205
! (except the factors) are PTLUST_S and PTRFAC.
206
INTEGER, DIMENSION(:), POINTER :: PTLUST_S, PTRFAC
207
! main real working arrays for factorization/solve phases
208
COMPLEX*16, DIMENSION(:), POINTER :: S
209
! Information on mapping
210
INTEGER, DIMENSION(:), POINTER :: PROCNODE
211
! Input matrix ready for numerical assembly
212
! -arrowhead format in case of assembled matrix
213
! -element format otherwise
214
INTEGER, DIMENSION(:), POINTER :: INTARR
215
COMPLEX*16, DIMENSION(:), POINTER :: DBLARR
216
! Element entry: internal data
217
INTEGER NELT_LOC, LELTVAR, NA_ELT, pad8
218
INTEGER, DIMENSION(:), POINTER :: ELTPROC
219
! Candidates and node partitionning
220
INTEGER, DIMENSION(:,:), POINTER :: CANDIDATES
221
INTEGER, DIMENSION(:), POINTER :: ISTEP_TO_INIV2
222
INTEGER, DIMENSION(:), POINTER :: FUTURE_NIV2
223
INTEGER, DIMENSION(:,:), POINTER :: TAB_POS_IN_PERE
224
LOGICAL, DIMENSION(:), POINTER :: I_AM_CAND
225
! For heterogeneous architecture
226
INTEGER, DIMENSION(:), POINTER :: MEM_DIST
228
INTEGER, DIMENSION(:), POINTER :: POSINRHSCOMP
229
COMPLEX*16, DIMENSION(:), POINTER :: RHSCOMP
231
! Info on the subtrees to be used during facto
232
INTEGER, DIMENSION(:), POINTER :: MEM_SUBTREE
233
INTEGER, DIMENSION(:), POINTER :: MY_ROOT_SBTR
234
INTEGER, DIMENSION(:), POINTER :: MY_FIRST_LEAF
235
INTEGER, DIMENSION(:), POINTER :: MY_NB_LEAF
236
INTEGER, DIMENSION(:), POINTER :: DEPTH_FIRST
237
DOUBLE PRECISION, DIMENSION(:), POINTER :: COST_TRAV
239
INTEGER MAX_SURF_MASTER
197
INTEGER,POINTER,DIMENSION(:)::FRERE_STEPS, DAD_STEPS
198
INTEGER,POINTER,DIMENSION(:)::FILS, PTRAR, FRTPTR, FRTELT
199
INTEGER,POINTER,DIMENSION(:)::NA, PROCNODE_STEPS
200
! The two pointer arrays computed in facto and used by the solve
201
! (except the factors) are PTLUST_S and PTRFAC.
202
INTEGER, DIMENSION(:), POINTER :: PTLUST_S
203
INTEGER(8), DIMENSION(:), POINTER :: PTRFAC
204
! main real working arrays for factorization/solve phases
205
COMPLEX*16, DIMENSION(:), POINTER :: S
206
! Information on mapping
207
INTEGER, DIMENSION(:), POINTER :: PROCNODE
208
! Input matrix ready for numerical assembly
209
! -arrowhead format in case of assembled matrix
210
! -element format otherwise
211
INTEGER, DIMENSION(:), POINTER :: INTARR
212
COMPLEX*16, DIMENSION(:), POINTER :: DBLARR
213
! Element entry: internal data
214
INTEGER NELT_LOC, LELTVAR, NA_ELT, pad8
215
INTEGER, DIMENSION(:), POINTER :: ELTPROC
216
! Candidates and node partitionning
217
INTEGER, DIMENSION(:,:), POINTER :: CANDIDATES
218
INTEGER, DIMENSION(:), POINTER :: ISTEP_TO_INIV2
219
INTEGER, DIMENSION(:), POINTER :: FUTURE_NIV2
220
INTEGER, DIMENSION(:,:), POINTER :: TAB_POS_IN_PERE
221
LOGICAL, DIMENSION(:), POINTER :: I_AM_CAND
222
! For heterogeneous architecture
223
INTEGER, DIMENSION(:), POINTER :: MEM_DIST
225
INTEGER, DIMENSION(:), POINTER :: POSINRHSCOMP
226
COMPLEX*16, DIMENSION(:), POINTER :: RHSCOMP
228
! Info on the subtrees to be used during factorization
229
DOUBLE PRECISION, DIMENSION(:), POINTER :: MEM_SUBTREE
230
INTEGER, DIMENSION(:), POINTER :: MY_ROOT_SBTR
231
INTEGER, DIMENSION(:), POINTER :: MY_FIRST_LEAF
232
INTEGER, DIMENSION(:), POINTER :: MY_NB_LEAF
233
INTEGER, DIMENSION(:), POINTER :: DEPTH_FIRST
234
DOUBLE PRECISION, DIMENSION(:), POINTER :: COST_TRAV
236
INTEGER(8) :: MAX_SURF_MASTER
238
COMPLEX*16, DIMENSION(:), POINTER :: WK_USER
240
239
! For simulating parallel out-of-core stack.
241
INTEGER, DIMENSION(:),POINTER ::CB_SON_SIZE
240
DOUBLE PRECISION, DIMENSION(:),POINTER ::CB_SON_SIZE
242
241
! Instance number used/managed by the C/F77 interface
243
INTEGER INSTANCE_NUMBER
242
INTEGER INSTANCE_NUMBER
244
243
! OOC management data that must persist from factorization to solve.
245
INTEGER OOC_MAX_NB_NODES_FOR_ZONE
246
INTEGER, DIMENSION(:,:), POINTER :: OOC_INODE_SEQUENCE
247
INTEGER, DIMENSION(:,:), POINTER :: OOC_SIZE_OF_BLOCK
248
INTEGER*8, DIMENSION(:,:), POINTER :: OOC_VADDR
249
INTEGER,DIMENSION(:), POINTER :: OOC_TOTAL_NB_NODES
250
INTEGER,DIMENSION(:), POINTER :: OOC_NB_FILES
251
CHARACTER,DIMENSION(:,:), POINTER :: OOC_FILE_NAMES
252
INTEGER,DIMENSION(:), POINTER :: OOC_FILE_NAME_LENGTH
244
INTEGER OOC_MAX_NB_NODES_FOR_ZONE
245
INTEGER, DIMENSION(:,:), POINTER :: OOC_INODE_SEQUENCE
246
INTEGER(8),DIMENSION(:,:), POINTER :: OOC_SIZE_OF_BLOCK
247
INTEGER*8, DIMENSION(:,:), POINTER :: OOC_VADDR
248
INTEGER,DIMENSION(:), POINTER :: OOC_TOTAL_NB_NODES
249
INTEGER,DIMENSION(:), POINTER :: OOC_NB_FILES
250
CHARACTER,DIMENSION(:,:), POINTER :: OOC_FILE_NAMES
251
INTEGER,DIMENSION(:), POINTER :: OOC_FILE_NAME_LENGTH
253
252
! Indices of nul pivots
254
INTEGER,DIMENSION(:), POINTER :: PIVNUL_LIST
253
INTEGER,DIMENSION(:), POINTER :: PIVNUL_LIST
255
254
! Internal control array
256
DOUBLE PRECISION DKEEP(30)
255
DOUBLE PRECISION DKEEP(30)
257
256
! Array needed to manage additionnal candidate processor
258
INTEGER, DIMENSION(:,:), POINTER :: SUP_PROC
257
INTEGER, DIMENSION(:,:), POINTER :: SUP_PROC
259
258
! ------------------------
260
259
! Root structure(internal)
261
260
! ------------------------
262
TYPE (ZMUMPS_ROOT_STRUC) :: root
261
TYPE (ZMUMPS_ROOT_STRUC) :: root
263
262
END TYPE ZMUMPS_STRUC