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

Go to the source code of this file.

Functions/Subroutines

subroutine zmumps_end_driver (id)
subroutine zmumps_free_id_data_modules (id_fdm_f_encoding, id_blrarray_encoding, keep8, k34)

Function/Subroutine Documentation

◆ zmumps_end_driver()

subroutine zmumps_end_driver ( type( zmumps_struc ) id)

Definition at line 14 of file zend_driver.F.

15 USE zmumps_ooc
17 USE zmumps_buf
19 IMPLICIT NONE
20 include 'mpif.h'
21 TYPE( ZMUMPS_STRUC ) :: id
22 LOGICAL I_AM_SLAVE
23 INTEGER IERR
24 INTEGER MASTER
25 PARAMETER ( master = 0 )
26C Explicit needed because of pointer arguments
27 INTERFACE
28 SUBROUTINE zmumps_free_id_data_modules(id_FDM_F_ENCODING,
29 & id_BLRARRAY_ENCODING, KEEP8, K34)
30# if defined(MUMPS_F2003)
31 CHARACTER, DIMENSION(:), POINTER, intent(inout) ::
32 & id_blrarray_encoding
33 CHARACTER, DIMENSION(:), POINTER, intent(inout) ::
34 & id_fdm_f_encoding
35# else
36 CHARACTER, DIMENSION(:), POINTER :: id_BLRARRAY_ENCODING
37 CHARACTER, DIMENSION(:), POINTER :: id_FDM_F_ENCODING
38# endif
39 INTEGER(8), intent(inout) :: KEEP8(150)
40 INTEGER, intent(in) :: K34
41 END SUBROUTINE zmumps_free_id_data_modules
42 END INTERFACE
43 i_am_slave = ( id%MYID .ne. master .OR. id%KEEP(46) .NE. 0 )
44C ----------------------------------
45C Special stuff for implementations
46C where MPI_CANCEL does not exist or
47C is not correctly implemented.
48C At the moment, this is only
49C required for the slaves.
50C ----------------------------------
51 IF (id%KEEP(201).GT.0 .AND. i_am_slave) THEN
52 CALL zmumps_clean_ooc_data(id,ierr)
53 IF (ierr < 0) THEN
54 id%INFO(1) = -90
55 id%INFO(2) = 0
56 ENDIF
57 END IF
58 CALL mumps_propinfo(id%ICNTL(1), id%INFO(1),
59 & id%COMM, id%MYID)
60 IF (id%root%gridinit_done) THEN
61 IF ( id%KEEP(38).NE.0 .and. id%root%yes ) THEN
62 CALL blacs_gridexit( id%root%CNTXT_BLACS )
63 id%root%gridinit_done = .false.
64 END IF
65 END IF
66 IF ( id%MYID .NE. master .OR. id%KEEP(46) .ne. 0 ) THEN
67C Note that on some old platforms, COMM_NODES would have been
68C freed inside BLACS_GRIDEXIT, which may cause problems
69C in the call to MPI_COMM_FREE. (This was the case on the
70C old SP2 in Bonn.)
71 CALL mpi_comm_free( id%COMM_NODES, ierr )
72C Free communicator related to load messages.
73 CALL mpi_comm_free( id%COMM_LOAD, ierr )
74 END IF
75 CALL mumps_destroy_arch_node_comm( id%KEEP(411) )
76C -----------------------------------
77C Right-hand-side is always user data
78C We do not free it.
79C -----------------------------------
80 IF (associated(id%MEM_DIST)) THEN
81 DEALLOCATE(id%MEM_DIST)
82 NULLIFY(id%MEM_DIST)
83 ENDIF
84C
85C
86C
87C ---------------------------------
88C Allocated by ZMUMPS, Used by user.
89C ZMUMPS deallocates. User should
90C use them before ZMUMPS_END_DRIVER or
91C copy.
92C ---------------------------------
93 IF (associated(id%MAPPING)) THEN
94 DEALLOCATE(id%MAPPING)
95 NULLIFY(id%MAPPING)
96 END IF
97 NULLIFY(id%SCHUR_CINTERFACE)
98C
99C -------------------------------------
100C Always deallocate scaling arrays
101C if they are associated, except
102C when provided by the user (on master)
103C -------------------------------------
104 IF ( id%KEEP(52) .NE. -1 .or. id%MYID .ne. master ) THEN
105 IF (associated(id%COLSCA)) THEN
106 DEALLOCATE(id%COLSCA)
107 NULLIFY(id%COLSCA)
108 ENDIF
109 IF (associated(id%ROWSCA)) THEN
110 DEALLOCATE(id%ROWSCA)
111 NULLIFY(id%ROWSCA)
112 ENDIF
113 END IF
114 IF (associated(id%PTLUST_S)) THEN
115 DEALLOCATE(id%PTLUST_S)
116 NULLIFY(id%PTLUST_S)
117 END IF
118 IF (associated(id%PTRFAC)) THEN
119 DEALLOCATE(id%PTRFAC)
120 NULLIFY(id%PTRFAC)
121 END IF
122 IF (associated(id%IS)) THEN
123 DEALLOCATE(id%IS)
124 NULLIFY(id%IS)
125 ENDIF
126 IF (associated(id%STEP)) THEN
127 DEALLOCATE(id%STEP)
128 NULLIFY(id%STEP)
129 ENDIF
130C Begin PRUN_NODES
131C Info for pruning tree
132 IF (associated(id%Step2node)) THEN
133 DEALLOCATE(id%Step2node)
134 NULLIFY(id%Step2node)
135 ENDIF
136C END PRUN_NODES
137c ---------------------
138 IF (associated(id%NE_STEPS)) THEN
139 DEALLOCATE(id%NE_STEPS)
140 NULLIFY(id%NE_STEPS)
141 ENDIF
142 IF (associated(id%ND_STEPS)) THEN
143 DEALLOCATE(id%ND_STEPS)
144 NULLIFY(id%ND_STEPS)
145 ENDIF
146 IF (associated(id%FRERE_STEPS)) THEN
147 DEALLOCATE(id%FRERE_STEPS)
148 NULLIFY(id%FRERE_STEPS)
149 ENDIF
150 IF (associated(id%DAD_STEPS)) THEN
151 DEALLOCATE(id%DAD_STEPS)
152 NULLIFY(id%DAD_STEPS)
153 ENDIF
154 IF (associated(id%SYM_PERM)) THEN
155 DEALLOCATE(id%SYM_PERM)
156 NULLIFY(id%SYM_PERM)
157 ENDIF
158 IF (associated(id%UNS_PERM)) THEN
159 DEALLOCATE(id%UNS_PERM)
160 NULLIFY(id%UNS_PERM)
161 ENDIF
162 IF (associated(id%PIVNUL_LIST)) THEN
163 DEALLOCATE(id%PIVNUL_LIST)
164 NULLIFY(id%PIVNUL_LIST)
165 ENDIF
166 IF (associated(id%FILS)) THEN
167 DEALLOCATE(id%FILS)
168 NULLIFY(id%FILS)
169 ENDIF
170 IF (associated(id%PTRAR)) THEN
171 DEALLOCATE(id%PTRAR)
172 NULLIFY(id%PTRAR)
173 ENDIF
174 IF (associated(id%FRTPTR)) THEN
175 DEALLOCATE(id%FRTPTR)
176 NULLIFY(id%FRTPTR)
177 ENDIF
178 IF (associated(id%FRTELT)) THEN
179 DEALLOCATE(id%FRTELT)
180 NULLIFY(id%FRTELT)
181 ENDIF
182 IF (associated(id%NA)) THEN
183 DEALLOCATE(id%NA)
184 NULLIFY(id%NA)
185 ENDIF
186 IF (associated(id%PROCNODE_STEPS)) THEN
187 DEALLOCATE(id%PROCNODE_STEPS)
188 NULLIFY(id%PROCNODE_STEPS)
189 ENDIF
190 IF (associated(id%RHSCOMP)) THEN
191 DEALLOCATE(id%RHSCOMP)
192 NULLIFY(id%RHSCOMP)
193 id%KEEP8(25)=0_8
194 ENDIF
195 IF (associated(id%POSINRHSCOMP_ROW)) THEN
196 DEALLOCATE(id%POSINRHSCOMP_ROW)
197 NULLIFY(id%POSINRHSCOMP_ROW)
198 ENDIF
199 IF (id%POSINRHSCOMP_COL_ALLOC) THEN
200 DEALLOCATE(id%POSINRHSCOMP_COL)
201 NULLIFY(id%POSINRHSCOMP_COL)
202 id%POSINRHSCOMP_COL_ALLOC = .false.
203 ENDIF
204C ------------------------------------------------
205C For hybrid host and element entry,
206C and DBLARR have not been allocated
207C on the master except if there was scaing.
208C ------------------------------------------------
209 IF (id%KEEP(46).eq.1 .and.
210 & id%KEEP(55).ne.0 .and.
211 & id%MYID .eq. master .and.
212 & id%KEEP(52) .eq. 0 ) THEN
213 NULLIFY(id%DBLARR)
214 ELSE
215 IF (associated(id%DBLARR)) THEN
216 DEALLOCATE(id%DBLARR)
217 NULLIFY(id%DBLARR)
218 ENDIF
219 END IF
220 IF (associated(id%INTARR)) THEN
221 DEALLOCATE(id%INTARR)
222 NULLIFY(id%INTARR)
223 ENDIF
224 IF (associated(id%root%RG2L_ROW))THEN
225 DEALLOCATE(id%root%RG2L_ROW)
226 NULLIFY(id%root%RG2L_ROW)
227 ENDIF
228 IF (associated(id%root%RG2L_COL))THEN
229 DEALLOCATE(id%root%RG2L_COL)
230 NULLIFY(id%root%RG2L_COL)
231 ENDIF
232C IPIV is used both for ScaLAPACK and RR
233C Keep it outside ZMUMPS_RR_FREE_POINTERS
234 IF (associated(id%root%IPIV)) THEN
235 DEALLOCATE(id%root%IPIV)
236 NULLIFY(id%root%IPIV)
237 ENDIF
238 IF (associated(id%root%RHS_CNTR_MASTER_ROOT)) THEN
239 DEALLOCATE(id%root%RHS_CNTR_MASTER_ROOT)
240 NULLIFY(id%root%RHS_CNTR_MASTER_ROOT)
241 ENDIF
242 IF (associated(id%root%RHS_ROOT))THEN
243 DEALLOCATE(id%root%RHS_ROOT)
244 NULLIFY(id%root%RHS_ROOT)
245 ENDIF
247 IF (associated(id%ELTPROC)) THEN
248 DEALLOCATE(id%ELTPROC)
249 NULLIFY(id%ELTPROC)
250 ENDIF
251C id%CANDIDATES,id%I_AM_CAND and id%ISTEP_TO_INIV2
252C can be allocated on non-working master
253C in the case of arrowheads distribution
254 IF (associated(id%CANDIDATES)) THEN
255 DEALLOCATE(id%CANDIDATES)
256 NULLIFY(id%CANDIDATES)
257 ENDIF
258 IF (associated(id%I_AM_CAND)) THEN
259 DEALLOCATE(id%I_AM_CAND)
260 NULLIFY(id%I_AM_CAND)
261 ENDIF
262 IF (associated(id%ISTEP_TO_INIV2)) THEN
263 DEALLOCATE(id%ISTEP_TO_INIV2)
264 NULLIFY(id%ISTEP_TO_INIV2)
265 ENDIF
266C Node partitionning (only allocated on slaves)
267 IF (i_am_slave) THEN
268 IF (associated(id%TAB_POS_IN_PERE)) THEN
269 DEALLOCATE(id%TAB_POS_IN_PERE)
270 NULLIFY(id%TAB_POS_IN_PERE)
271 ENDIF
272 IF (associated(id%FUTURE_NIV2)) THEN
273 DEALLOCATE(id%FUTURE_NIV2)
274 NULLIFY(id%FUTURE_NIV2)
275 ENDIF
276 ENDIF
277 IF(associated(id%DEPTH_FIRST))THEN
278 DEALLOCATE(id%DEPTH_FIRST)
279 NULLIFY(id%DEPTH_FIRST)
280 ENDIF
281 IF(associated(id%DEPTH_FIRST_SEQ))THEN
282 DEALLOCATE(id%DEPTH_FIRST_SEQ)
283 NULLIFY(id%DEPTH_FIRST_SEQ)
284 ENDIF
285 IF(associated(id%SBTR_ID))THEN
286 DEALLOCATE(id%SBTR_ID)
287 NULLIFY(id%SBTR_ID)
288 ENDIF
289 IF(associated(id%SCHED_DEP))THEN
290 DEALLOCATE(id%SCHED_DEP)
291 NULLIFY(id%SCHED_DEP)
292 ENDIF
293 IF(associated(id%SCHED_SBTR))THEN
294 DEALLOCATE(id%SCHED_SBTR)
295 NULLIFY(id%SCHED_SBTR)
296 ENDIF
297 IF(associated(id%SCHED_GRP))THEN
298 DEALLOCATE(id%SCHED_GRP)
299 NULLIFY(id%SCHED_GRP)
300 ENDIF
301 IF(associated(id%CROIX_MANU))THEN
302 DEALLOCATE(id%CROIX_MANU)
303 NULLIFY(id%CROIX_MANU)
304 ENDIF
305 IF (associated(id%MEM_SUBTREE)) THEN
306 DEALLOCATE(id%MEM_SUBTREE)
307 NULLIFY(id%MEM_SUBTREE)
308 ENDIF
309 IF (associated(id%MY_ROOT_SBTR)) THEN
310 DEALLOCATE(id%MY_ROOT_SBTR)
311 NULLIFY(id%MY_ROOT_SBTR)
312 ENDIF
313 IF (associated(id%MY_FIRST_LEAF)) THEN
314 DEALLOCATE(id%MY_FIRST_LEAF)
315 NULLIFY(id%MY_FIRST_LEAF)
316 ENDIF
317 IF (associated(id%MY_NB_LEAF)) THEN
318 DEALLOCATE(id%MY_NB_LEAF)
319 NULLIFY(id%MY_NB_LEAF)
320 ENDIF
321 IF (associated(id%COST_TRAV)) THEN
322 DEALLOCATE(id%COST_TRAV)
323 NULLIFY(id%COST_TRAV)
324 ENDIF
325 IF (associated(id%CB_SON_SIZE)) THEN
326 DEALLOCATE(id%CB_SON_SIZE)
327 NULLIFY(id%CB_SON_SIZE)
328 ENDIF
329 IF (associated(id%SUP_PROC)) THEN
330 DEALLOCATE(id%SUP_PROC)
331 NULLIFY(id%SUP_PROC)
332 ENDIF
333c IF (id%KEEP(201).GT.0) THEN
334 IF(associated (id%OOC_INODE_SEQUENCE))THEN
335 DEALLOCATE(id%OOC_INODE_SEQUENCE)
336 NULLIFY(id%OOC_INODE_SEQUENCE)
337 ENDIF
338 IF(associated (id%OOC_TOTAL_NB_NODES))THEN
339 DEALLOCATE(id%OOC_TOTAL_NB_NODES)
340 NULLIFY(id%OOC_TOTAL_NB_NODES)
341 ENDIF
342 IF(associated (id%OOC_SIZE_OF_BLOCK))THEN
343 DEALLOCATE(id%OOC_SIZE_OF_BLOCK)
344 NULLIFY(id%OOC_SIZE_OF_BLOCK)
345 ENDIF
346 IF(associated (id%OOC_VADDR))THEN
347 DEALLOCATE(id%OOC_VADDR)
348 NULLIFY(id%OOC_VADDR)
349 ENDIF
350 IF(associated (id%OOC_NB_FILES))THEN
351 DEALLOCATE(id%OOC_NB_FILES)
352 NULLIFY(id%OOC_NB_FILES)
353 ENDIF
354c ENDIF
355! IF(id%KEEP(486).NE.0) THEN
356 IF (associated(id%LRGROUPS)) THEN
357 DEALLOCATE(id%LRGROUPS)
358 NULLIFY(id%LRGROUPS)
359 ENDIF
360! ENDIF
361 CALL zmumps_free_id_data_modules(id%FDM_F_ENCODING,
362 & id%BLRARRAY_ENCODING, id%KEEP8(1), id%KEEP(34))
363 IF (associated(id%MPITOOMP_PROCS_MAP)) THEN
364 DEALLOCATE(id%MPITOOMP_PROCS_MAP)
365 NULLIFY(id%MPITOOMP_PROCS_MAP)
366 ENDIF
367 IF (associated(id%SINGULAR_VALUES)) THEN
368 DEALLOCATE(id%SINGULAR_VALUES)
369 NULLIFY(id%SINGULAR_VALUES)
370 ENDIF
371C ----------------------------------------------
372C Deallocate S only after finishing the receives
373C (S is normally the largest memory available)
374C ----------------------------------------------
375 IF (id%KEEP8(24).EQ.0_8) THEN
376C -- deallocate only when not provided/allocated by the user
377 IF (associated(id%S)) DEALLOCATE(id%S)
378 ENDIF
379 NULLIFY(id%S)
380 IF (i_am_slave) THEN
381C ------------------------
382C Deallocate buffer for
383C contrib-blocks (facto/
384C solve). Note that this
385C will cancel all possible
386C pending requests.
387C ------------------------
388 CALL zmumps_buf_deall_cb( ierr )
389C Deallocate buffer for integers (facto/solve)
390 CALL zmumps_buf_deall_small_buf( ierr )
391 END IF
392C Mapping information used during solve
393 IF (associated(id%IPTR_WORKING)) THEN
394 DEALLOCATE(id%IPTR_WORKING)
395 NULLIFY(id%IPTR_WORKING)
396 END IF
397 IF (associated(id%WORKING)) THEN
398 DEALLOCATE(id%WORKING)
399 NULLIFY(id%WORKING)
400 END IF
401 IF (associated(id%IPOOL_B_L0_OMP)) THEN
402 DEALLOCATE(id%IPOOL_B_L0_OMP)
403 NULLIFY(id%IPOOL_B_L0_OMP)
404 END IF
405 IF (associated(id%IPOOL_A_L0_OMP)) THEN
406 DEALLOCATE(id%IPOOL_A_L0_OMP)
407 NULLIFY(id%IPOOL_A_L0_OMP)
408 END IF
409 IF (associated(id%PHYS_L0_OMP)) THEN
410 DEALLOCATE(id%PHYS_L0_OMP)
411 NULLIFY(id%PHYS_L0_OMP)
412 END IF
413 IF (associated(id%VIRT_L0_OMP)) THEN
414 DEALLOCATE(id%VIRT_L0_OMP)
415 NULLIFY(id%VIRT_L0_OMP)
416 END IF
417 IF (associated(id%VIRT_L0_OMP_MAPPING)) THEN
418 DEALLOCATE(id%VIRT_L0_OMP_MAPPING)
419 NULLIFY(id%VIRT_L0_OMP_MAPPING)
420 END IF
421 IF (associated(id%PERM_L0_OMP)) THEN
422 DEALLOCATE(id%PERM_L0_OMP)
423 NULLIFY(id%PERM_L0_OMP)
424 END IF
425 IF (associated(id%PTR_LEAFS_L0_OMP)) THEN
426 DEALLOCATE(id%PTR_LEAFS_L0_OMP)
427 NULLIFY(id%PTR_LEAFS_L0_OMP)
428 END IF
429 IF (associated(id%L0_OMP_MAPPING)) THEN
430 DEALLOCATE(id%L0_OMP_MAPPING)
431 NULLIFY(id%L0_OMP_MAPPING)
432 END IF
433 IF (associated(id%I4_L0_OMP)) THEN
434 DEALLOCATE(id%I4_L0_OMP)
435 NULLIFY(id%I4_L0_OMP)
436 END IF
437 IF (associated(id%I8_L0_OMP)) THEN
438 DEALLOCATE(id%I8_L0_OMP)
439 NULLIFY(id%I8_L0_OMP)
440 END IF
441 IF (associated(id%L0_OMP_FACTORS)) THEN
442 CALL zmumps_free_l0_omp_factors(id%L0_OMP_FACTORS)
443 END IF
444 RETURN
subroutine mumps_propinfo(icntl, info, comm, id)
subroutine mpi_comm_free(comm, ierr)
Definition mpi.f:238
subroutine blacs_gridexit(cntxt)
Definition mpi.f:762
initmumps id
subroutine, public zmumps_buf_deall_small_buf(ierr)
subroutine, public zmumps_buf_deall_cb(ierr)
subroutine, public zmumps_free_l0_omp_factors(id_l0_omp_factors)
subroutine zmumps_clean_ooc_data(id, ierr)
Definition zmumps_ooc.F:568
subroutine mumps_destroy_arch_node_comm(arch_node_comm)
subroutine zmumps_free_id_data_modules(id_fdm_f_encoding, id_blrarray_encoding, keep8, k34)
subroutine zmumps_rr_free_pointers(id)

◆ zmumps_free_id_data_modules()

subroutine zmumps_free_id_data_modules ( character, dimension(:), pointer id_fdm_f_encoding,
character, dimension(:), pointer id_blrarray_encoding,
integer(8), dimension(150), intent(inout) keep8,
integer, intent(in) k34 )

Definition at line 446 of file zend_driver.F.

452 IMPLICIT NONE
453C
454C Purpose:
455C =======
456C
457C Free data from modules kept from one phase to the other
458C and referenced through the main MUMPS structure, id.
459C
460C Both id%FDM_F_ENCODING and id%BLRARRAY_ENCODING
461C are concerned.
462C
463C
464C
465C Arguments:
466C =========
467C
468# if defined(MUMPS_F2003)
469 CHARACTER, DIMENSION(:), POINTER, intent(inout) ::
470 & id_BLRARRAY_ENCODING
471 CHARACTER, DIMENSION(:), POINTER, intent(inout) ::
472 & id_FDM_F_ENCODING
473# else
474 CHARACTER, DIMENSION(:), POINTER :: id_BLRARRAY_ENCODING
475 CHARACTER, DIMENSION(:), POINTER :: id_FDM_F_ENCODING
476# endif
477 INTEGER(8), intent(inout) :: KEEP8(150)
478 INTEGER, intent(in) :: K34
479C
480 IF (associated(id_fdm_f_encoding)) THEN
481C Allow access to FDM_F data for BLR_END_MODULE
482 CALL mumps_fdm_struc_to_mod('F', id_fdm_f_encoding)
483 IF (associated(id_blrarray_encoding)) THEN
484C Pass id_BLRARRAY_ENCODING control to module
485C and terminate BLR module of current instance
486 CALL zmumps_blr_struc_to_mod(id_blrarray_encoding)
487 CALL zmumps_blr_end_module(0, keep8, k34,
488 & lrsolve_act_opt=.true.)
489 ENDIF
490C ---------------------------------------
491C FDM data structures are still allocated
492C in the module and should be freed
493C ---------------------------------------
494 CALL mumps_fdm_end('F')
495 ENDIF
496 RETURN
subroutine, public mumps_fdm_struc_to_mod(what, id_fdm_encoding)
subroutine, public mumps_fdm_end(what)
subroutine, public zmumps_blr_struc_to_mod(id_blrarray_encoding)
subroutine, public zmumps_blr_end_module(info1, keep8, k34, lrsolve_act_opt)