OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sini_driver.F File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine smumps_ini_driver (id)

Function/Subroutine Documentation

◆ smumps_ini_driver()

subroutine smumps_ini_driver ( type (smumps_struc) id)

Definition at line 19 of file sini_driver.F.

21C
22C Purpose:
23C =======
24C
25C Initialize an instance of the SMUMPS package.
26C
27 USE smumps_buf
28 IMPLICIT NONE
29 include 'mpif.h'
30 TYPE (SMUMPS_STRUC) id
31 INTEGER MASTER, IERR,PAR_loc,SYM_loc
32 parameter( master = 0 )
33 INTEGER color
34C -----------------------------
35C Initialize MPI related data
36C -----------------------------
37 CALL mpi_comm_size(id%COMM, id%NPROCS, ierr )
38C Now done in the main MUMPS driver:
39C CALL MPI_COMM_RANK(id%COMM, id%MYID, IERR )
40C
41 par_loc=id%PAR
42 sym_loc=id%SYM
43C Broadcasting PAR/SYM (KEEP(46)/KEEP(50)) in order to
44C have only one value available: the one from the master
45 CALL mpi_bcast(par_loc,1,mpi_integer,master,id%COMM,ierr)
46 CALL mpi_bcast(sym_loc,1,mpi_integer,master,id%COMM,ierr)
47C Initialize a subcommunicator
48C for slave nodes
49C
50 IF ( par_loc .eq. 0 ) THEN
51C -------------------
52C Host is not working
53C -------------------
54 IF ( id%MYID .eq. master ) THEN
55 color = mpi_undefined
56 ELSE
57 color = 0
58 END IF
59 CALL mpi_comm_split( id%COMM, color, 0,
60 & id%COMM_NODES, ierr )
61 id%NSLAVES = id%NPROCS - 1
62 ELSE
63C ----------------
64C Host is working
65C ----------------
66 CALL mpi_comm_dup( id%COMM, id%COMM_NODES, ierr )
67 id%NSLAVES = id%NPROCS
68 END IF
69C ---------------------------
70C Use same slave communicator
71C for load information
72C ---------------------------
73 IF (par_loc .ne. 0 .or. id%MYID .NE. master) THEN
74 CALL mpi_comm_dup( id%COMM_NODES, id%COMM_LOAD, ierr )
75 ENDIF
76C ----------------------------------------------
77C Initialize default values for CNTL,ICNTL,KEEP,KEEP8
78C potentially depending on id%SYM and id%NSLAVES
79C ----------------------------------------------
80 CALL smumpsid( id%NSLAVES, id%LWK_USER,
81 & id%CNTL(1), id%ICNTL(1),
82 & id%KEEP(1), id%KEEP8(1), id%INFO(1), id%INFOG(1),
83 & id%RINFO(1), id%RINFOG(1),
84 & sym_loc, par_loc, id%DKEEP(1), id%MYID )
85 CALL mumps_build_arch_node_comm( id%COMM, id%KEEP(411),
86 & id%KEEP(412), id%KEEP(413) )
87 id%WRITE_PROBLEM="NAME_NOT_INITIALIZED"
88 CALL mumps_set_version( id%VERSION_NUMBER )
89 id%OOC_TMPDIR="NAME_NOT_INITIALIZED"
90 id%OOC_PREFIX="NAME_NOT_INITIALIZED"
91 id%SAVE_DIR="NAME_NOT_INITIALIZED"
92 id%SAVE_PREFIX="NAME_NOT_INITIALIZED"
93C Default value for NRHS is 1
94 id%NRHS = 1
95C Leading dimension will be reset to id%N is SMUMPS_SOL_DRIVER
96C if id%NRHS remains equal to 1. Otherwise id%LRHS must be
97C set by user.
98 id%LRHS = 0 ! Value will be checked in SMUMPS_CHECK_DENSE_RHS
99 ! not accessed if id%NRHS=1
100C Similar behaviour for LREDRHS (value will
101C be checked in SMUMPS_CHECK_REDRHS)
102 id%LREDRHS = 0
103C
104C Module needs to know the size of an INTEGER
105 CALL smumps_buf_init( id%KEEP( 34 ), id%KEEP(35) )
106C
107 id%INST_Number = -1
108C
109C Define the options for Metis
110C
111 id%METIS_OPTIONS(:) = 0
112#if defined(metis) || defined(parmetis) || defined(metis4) || defined(parmetis3)
113#if defined(metis4) || defined(parmetis3)
114C Useful size is 8
115C set to default options
116 id%METIS_OPTIONS(1) = 0
117#else
118C Useful size is 40
119C This sets the default values
120 CALL metis_setdefaultoptions(id%METIS_OPTIONS)
121C This number, 18, corresponds to METIS_OPTIONS_NUMBERING which
122C tells METIS to use fortran numbering and is found in metis.h
123C In Metis 5.0.3 and Parmetis 4.0.2, METIS_OPTIONS_NUMBERING
124C was METIS_OPTIONS(17). MUMPS doesnot support those versions anymore.
125C To use them, just change METIS_OPTIONS(18) into METIS_OPTIONS(17)
126C like that: METIS_OPTIONS(17) = 1
127 id%METIS_OPTIONS(18) = 1
128#endif
129#endif
130C
131C Nullify a few pointers and integers
132C
133 id%N = 0; id%NZ = 0; id%NNZ = 0_8
134 NULLIFY(id%IRN)
135 NULLIFY(id%JCN)
136 NULLIFY(id%A)
137 id%NZ_loc = 0; id%NNZ_loc = 0_8
138 NULLIFY(id%IRN_loc)
139 NULLIFY(id%JCN_loc)
140 NULLIFY(id%A_loc)
141 NULLIFY(id%MAPPING)
142 NULLIFY(id%RHS)
143 NULLIFY(id%REDRHS)
144 id%NZ_RHS=0
145 NULLIFY(id%RHS_SPARSE)
146 NULLIFY(id%IRHS_SPARSE)
147 NULLIFY(id%IRHS_PTR)
148 NULLIFY(id%ISOL_loc)
149 NULLIFY(id%IRHS_loc)
150 id%LSOL_loc=0
151 id%LRHS_loc=0
152 id%Nloc_RHS=0
153 NULLIFY(id%SOL_loc)
154 NULLIFY(id%RHS_loc)
155 NULLIFY(id%COLSCA)
156 NULLIFY(id%ROWSCA)
157 NULLIFY(id%PERM_IN)
158 NULLIFY(id%IS)
159 NULLIFY(id%STEP)
160C Info for analysis by block
161 id%NBLK = 0
162 NULLIFY(id%BLKPTR)
163 NULLIFY(id%BLKVAR)
164C Info for pruning tree
165 NULLIFY(id%Step2node)
166 NULLIFY(id%DAD_STEPS)
167 NULLIFY(id%NE_STEPS)
168 NULLIFY(id%ND_STEPS)
169 NULLIFY(id%FRERE_STEPS)
170 NULLIFY(id%SYM_PERM)
171 NULLIFY(id%UNS_PERM)
172 NULLIFY(id%PIVNUL_LIST)
173 NULLIFY(id%FILS)
174 NULLIFY(id%PTRAR)
175 NULLIFY(id%FRTPTR)
176 NULLIFY(id%FRTELT)
177 NULLIFY(id%NA)
178 id%LNA=0
179 NULLIFY(id%PROCNODE_STEPS)
180 NULLIFY(id%S)
181 NULLIFY(id%PTLUST_S)
182 NULLIFY(id%PTRFAC)
183 NULLIFY(id%INTARR)
184 NULLIFY(id%DBLARR)
185 NULLIFY(id%DEPTH_FIRST)
186 NULLIFY(id%DEPTH_FIRST_SEQ)
187 NULLIFY(id%SBTR_ID)
188 NULLIFY(id%SCHED_DEP)
189 NULLIFY(id%SCHED_SBTR)
190 NULLIFY(id%SCHED_GRP)
191 NULLIFY(id%CROIX_MANU)
192 NULLIFY(id%WK_USER)
193 NULLIFY(id%MEM_SUBTREE)
194 NULLIFY(id%MEM_SUBTREE)
195 NULLIFY(id%MY_ROOT_SBTR)
196 NULLIFY(id%MY_FIRST_LEAF)
197 NULLIFY(id%MY_NB_LEAF)
198 NULLIFY(id%COST_TRAV)
199 NULLIFY(id%RHSCOMP)
200 NULLIFY(id%POSINRHSCOMP_ROW)
201 NULLIFY(id%POSINRHSCOMP_COL)
202 id%POSINRHSCOMP_COL_ALLOC = .false.
203C
204C Out of Core management related data
205C
206 NULLIFY(id%OOC_INODE_SEQUENCE)
207 NULLIFY(id%OOC_TOTAL_NB_NODES)
208 NULLIFY(id%OOC_SIZE_OF_BLOCK)
209 NULLIFY(id%OOC_FILE_NAME_LENGTH)
210 NULLIFY(id%OOC_FILE_NAMES)
211 NULLIFY(id%OOC_VADDR)
212 NULLIFY(id%OOC_NB_FILES)
213 NULLIFY(id%LRGROUPS)
214 NULLIFY(id%FDM_F_ENCODING)
215 NULLIFY(id%BLRARRAY_ENCODING)
216 NULLIFY(id%MPITOOMP_PROCS_MAP)
217C Must be nullified because of routine
218C SMUMPS_SIZE_IN_STRUCT
219 NULLIFY(id%CB_SON_SIZE)
220C
221C Components of the root
222C
223 NULLIFY(id%root%RHS_CNTR_MASTER_ROOT)
224 NULLIFY(id%root%RHS_ROOT)
225 NULLIFY(id%root%RG2L_ROW)
226 NULLIFY(id%root%RG2L_COL)
227 NULLIFY(id%root%IPIV)
228 NULLIFY(id%root%SCHUR_POINTER)
229 NULLIFY(id%SCHUR_CINTERFACE)
230C
231C Element-entry
232C
233 id%NELT=0
234 NULLIFY(id%ELTPTR)
235 NULLIFY(id%ELTVAR)
236 NULLIFY(id%A_ELT)
237 NULLIFY(id%ELTPROC)
238C
239C Schur
240C
241 id%SIZE_SCHUR = 0
242 NULLIFY( id%LISTVAR_SCHUR )
243 NULLIFY( id%SCHUR )
244C -- Distributed Schur
245 id%NPROW = 0
246 id%NPCOL = 0
247 id%MBLOCK = 0
248 id%NBLOCK = 0
249 id%SCHUR_MLOC = 0 ! Exit from analysis
250 id%SCHUR_NLOC = 0 ! Exit from analysis
251 id%SCHUR_LLD = 0
252C
253C Candidates and node partitionning
254C
255 NULLIFY(id%ISTEP_TO_INIV2)
256 NULLIFY(id%I_AM_CAND)
257 NULLIFY(id%FUTURE_NIV2)
258 NULLIFY(id%TAB_POS_IN_PERE)
259 NULLIFY(id%CANDIDATES)
260 id%OOC_NB_FILE_TYPE=-123456
261C
262C Initializations for L0_OMP mechanisms
263C
264 NULLIFY(id%IPOOL_B_L0_OMP)
265 NULLIFY(id%IPOOL_A_L0_OMP)
266 NULLIFY(id%PHYS_L0_OMP)
267 NULLIFY(id%VIRT_L0_OMP)
268 NULLIFY(id%VIRT_L0_OMP_MAPPING)
269 NULLIFY(id%PERM_L0_OMP)
270 NULLIFY(id%PTR_LEAFS_L0_OMP)
271 NULLIFY(id%L0_OMP_MAPPING)
272 NULLIFY(id%L0_OMP_FACTORS)
273 NULLIFY(id%I4_L0_OMP)
274 NULLIFY(id%I8_L0_OMP)
275 id%LPOOL_B_L0_OMP = 0
276 id%LPOOL_A_L0_OMP = 0
277 id%L_VIRT_L0_OMP = 0
278 id%L_PHYS_L0_OMP = 0
279 id%THREAD_LA = 0
280C
281C Mapping information used during solve.
282C
283 NULLIFY(id%IPTR_WORKING)
284 NULLIFY(id%WORKING)
285C
286C Initializations for Rank detection/null space
287C
288 NULLIFY(id%SINGULAR_VALUES)
290C Architecture data
291 NULLIFY(id%MEM_DIST)
292C Must be nullified because of routine
293C SMUMPS_SIZE_IN_STRUCT
294 NULLIFY(id%SUP_PROC)
295 id%Deficiency = 0
296 id%root%LPIV = -1
297 id%root%yes = .false.
298 id%root%gridinit_done = .false.
299C NOT IN SAVE/RESTORE
300 id%ASSOCIATED_OOC_FILES=.false.
301C
302C ----------------------------------------
303C Find MYID_NODES relatively to COMM_NODES
304C If the calling processor is not inside
305C COMM_NODES, MYID_NODES will not be
306C significant / used anyway
307C ----------------------------------------
308 IF ( id%KEEP( 46 ) .ne. 0 .OR.
309 & id%MYID .ne. master ) THEN
310 CALL mpi_comm_rank
311 & (id%COMM_NODES, id%MYID_NODES, ierr )
312 ELSE
313 id%MYID_NODES = -464646
314 ENDIF
315 RETURN
subroutine mpi_comm_split(comm, color, key, comm2, ierr)
Definition mpi.f:272
subroutine mpi_comm_dup(comm, comm2, ierr)
Definition mpi.f:230
subroutine mpi_comm_size(comm, size, ierr)
Definition mpi.f:263
subroutine mpi_bcast(buffer, cnt, datatype, root, comm, ierr)
Definition mpi.f:205
subroutine mpi_comm_rank(comm, rank, ierr)
Definition mpi.f:254
initmumps id
subroutine mumps_set_version(version_str)
subroutine, public smumps_buf_init(intsize, realsize)
subroutine smumpsid(nslaves, lwk_user, cntl, icntl, keep, keep8, info, infog, rinfo, rinfog, sym, par, dkeep, myid)
subroutine smumps_rr_init_pointers(id)
subroutine mumps_build_arch_node_comm(comm, newcomm, newsize, newrank)