OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sini_driver.F
Go to the documentation of this file.
1C
2C This file is part of MUMPS 5.5.1, released
3C on Tue Jul 12 13:17:24 UTC 2022
4C
5C
6C Copyright 1991-2022 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria,
7C Mumps Technologies, University of Bordeaux.
8C
9C This version of MUMPS is provided to you free of charge. It is
10C released under the CeCILL-C license
11C (see doc/CeCILL-C_V1-en.txt, doc/CeCILL-C_V1-fr.txt, and
12C https://cecill.info/licences/Licence_CeCILL-C_V1-en.html)
13C
14#if defined(__ve__)
15#if defined(VHOFFLOAD)
16#include 've.h'
17#endif
18#endif
19 SUBROUTINE smumps_ini_driver( id )
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
316 END SUBROUTINE smumps_ini_driver
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
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_ini_driver(id)
Definition sini_driver.F:20
subroutine smumps_rr_init_pointers(id)
subroutine mumps_build_arch_node_comm(comm, newcomm, newsize, newrank)