43
48 & zmumps_l0ompfac_t
51 IMPLICIT NONE
52 include 'mpif.h'
53 include 'mumps_tags.h'
54 include 'mumps_headers.h'
55 TYPE (ZMUMPS_ROOT_STRUC) :: root
56 INTEGER N,LIW, LPTRAR,
57 & NSTEPSW, INFO(80)
58 INTEGER SLAVEF, COMM_NODES, MYID_NODES
59 INTEGER, DIMENSION(0: SLAVEF - 1) :: MEM_DISTRIB
60 INTEGER KEEP(500), ICNTL(60)
61 INTEGER(8) KEEP8(150)
62 INTEGER(8), INTENT(IN) :: THREAD_LA
63 INTEGER PROCNODE_STEPS(KEEP(28))
64 INTEGER ITLOC(N+KEEP(253))
65 COMPLEX(kind=8) :: RHS_MUMPS(KEEP(255))
66 INTEGER NSTK_STEPS(KEEP(28))
67 INTEGER(8), INTENT(IN) :: PTRARW(LPTRAR), PTRAIW(LPTRAR)
68 INTEGER ND(KEEP(28))
69 INTEGER FILS(N),PTRIST(KEEP(28))
70 INTEGER STEP(N), FRERE(KEEP(28)), DAD(KEEP(28))
71 INTEGER PIMASTER(KEEP(28))
72 INTEGER PTLUST_S(KEEP(28)), PERM(N)
73 INTEGER ISTEP_TO_INIV2(KEEP(71)),
74 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
75 INTEGER NE(KEEP(28))
76 DOUBLE PRECISION RINFO(40)
77 INTEGER(8) :: PAMASTER(KEEP(28)), PTRAST(KEEP(28))
78 INTEGER(8) :: PTRFAC(KEEP(28))
79 INTEGER NBROOT
80 INTEGER NBRTOT
81 INTEGER, intent(out) :: NBROOT_UNDER_L0
82 INTEGER COMM_LOAD, ASS_IRECV
83 DOUBLE PRECISION UU, SEUIL, SEUIL_LDLT_NIV2
84 INTEGER NELT
85 INTEGER FRTPTR( N+1 ), FRTELT( NELT )
86 INTEGER LBUFR, LBUFR_BYTES
87 INTEGER BUFR( LBUFR )
88 COMPLEX(kind=8) DBLARR( KEEP8(26) )
89 INTEGER INTARR( KEEP8(27) )
90 INTEGER LPN_LIST
91 INTEGER PIVNUL_LIST(LPN_LIST)
92 DOUBLE PRECISION DKEEP(230)
93 DOUBLE PRECISION :: OPASSW, OPELIW
94 INTEGER LRGROUPS(N)
95 INTEGER, INTENT ( IN ) :: LPOOL_B_L0_OMP
96 INTEGER, INTENT ( IN ) :: IPOOL_B_L0_OMP
97 & ( LPOOL_B_L0_OMP )
98 INTEGER, INTENT ( IN ) :: L_PHYS_L0_OMP
99 INTEGER, INTENT ( IN ) :: PHYS_L0_OMP( L_PHYS_L0_OMP )
100 INTEGER, INTENT ( IN ) :: L_VIRT_L0_OMP
101 INTEGER, INTENT ( IN ) :: VIRT_L0_OMP( L_VIRT_L0_OMP )
102 INTEGER, INTENT ( IN ) :: VIRT_L0_OMP_MAPPING( L_VIRT_L0_OMP )
103 INTEGER, INTENT ( IN ) :: PERM_L0_OMP( L_PHYS_L0_OMP )
104 INTEGER, INTENT ( IN ) :: PTR_LEAFS_L0_OMP( L_PHYS_L0_OMP + 1)
105 INTEGER, INTENT ( IN ) :: LL0_OMP_MAPPING
106 INTEGER, INTENT ( OUT ) :: L0_OMP_MAPPING( LL0_OMP_MAPPING )
107 TYPE (MUMPS_TPS_T), DIMENSION(:) :: MUMPS_TPS_ARR
108 TYPE (ZMUMPS_TPS_T), DIMENSION(:) :: ZMUMPS_TPS_ARR
109 INTEGER, INTENT ( IN ) :: LL0_OMP_FACTORS
110 TYPE (ZMUMPS_L0OMPFAC_T), INTENT(INOUT) ::
111 & L0_OMP_FACTORS(LL0_OMP_FACTORS)
112 INTEGER, INTENT (IN) :: NBSTATS_I4, NBSTATS_I8
113 INTEGER, INTENT (IN) :: NBCOLS_I4, NBCOLS_I8
114 INTEGER, INTENT (IN) :: I4_L0_OMP(NBSTATS_I4, NBCOLS_I4)
115 INTEGER(8), INTENT (IN) :: I8_L0_OMP(NBSTATS_I8, NBCOLS_I8)
117 INTEGER MUMPS_TYPENODE, MUMPS_PROCNODE
118 LOGICAL MUMPS_INSSARBR,MUMPS_ROOTSSARBR
120 LOGICAL ZMUMPS_POOL_EMPTY
122 INTEGER numroc
124 INTEGER :: MYTHREAD_ID, ITH
125 INTEGER :: THREAD_ID_P
126 DOUBLE PRECISION, PARAMETER :: DZERO = 0.0d0, done = 1.0d0
127 INTEGER INODE, LEAF
128 INTEGER TYPEF
129 INTEGER NBFIN
130 INTEGER TYPE
131 LOGICAL AVOID_DELAYED
132 INTEGER NBROOT_PROCESSED
133 INTEGER MAXFRW, NPVW, NMAXNPIVW, NOFFNEGW, NELVAW, COMP
134 INTEGER :: NB22T1W, NBTINYW, DET_EXPW, DET_SIGNW
135 COMPLEX(kind=8) :: DET_MANTW
136 DOUBLE PRECISION FLOP_ESTIM_ACC
137#if defined(PANEL)
138 INTEGER(8) :: LAFAC
139 INTEGER LIWFAC, STRAT, TYPEFile, NextPiv2beWritten
140 INTEGER(8) :: ITMP8
141#endif
142 INTEGER :: LPOOL_P
143 INTEGER, DIMENSION(:), ALLOCATABLE :: IPOOL_P
144 INTEGER(8) :: TO_ALLOCATE
145 INTEGER, DIMENSION(:), ALLOCATABLE :: ID
146 INTEGER(8), DIMENSION(:), ALLOCATABLE :: VAL
147 INTEGER(8), ALLOCATABLE, DIMENSION(:) :: STATE, SIZE_COPIED
148 INTEGER :: NbWaitMem, NbFinished, NbOnGoingCopies, NbUnderL0
149 INTEGER(8) :: KEEP8_77_SAVE
150 DOUBLE PRECISION :: GTIME
151 INTEGER(8) :: MEMDISPO_UNDERL0, MEMDISPO_PERTHREAD
152 INTEGER :: BLR_STRAT
153 INTEGER :: VIRTUAL_TASK, PHYSICAL_TASK
154 INTEGER :: IFATH
155 INTEGER :: I, INFO_P(2), allocok
156 INTEGER(8) :: I8
157
158
159
162 l0_omp_mapping = 0
163 nbroot_processed = 0
164 nstepsw = 0
165 opassw = dzero
166 opeliw = dzero
167 nelvaw = 0
169 maxfrw = 0
170 nmaxnpivw = 0
171 noffnegw = 0
172 flop_estim_acc = dzero
173 npvw = 0
174 nb22t1w = 0
175 nbtinyw = 0
176 det_expw = 0
177 det_mantw =
cmplx(1.0d0,0.0d0, kind=kind(1.0d0))
178 det_signw = 1
179 DO ith = 1, keep(400)
180 NULLIFY(mumps_tps_arr(ith)%IW)
181 NULLIFY(mumps_tps_arr(ith)%ITLOC)
182 NULLIFY(zmumps_tps_arr(ith)%A)
183 CALL zmumps_set_maxs_maxis_thread(
184 & mumps_tps_arr(ith)%LA,
185 & mumps_tps_arr(ith)%LIW, blr_strat,
186 & keep,
187 & i4_l0_omp(1,ith), nbstats_i4,
188 & i8_l0_omp(1,ith), nbstats_i8)
189 ENDDO
190 IF (keep8(4) .NE. 0_8) THEN
191 CALL zmumps_ma_eff_mem_dispo (
192 & mumps_tps_arr, keep(400),keep8, keep,
193 & n, blr_strat, lpool_b_l0_omp,
194 & i8_l0_omp, nbstats_i8,
195 & memdispo_underl0
196 & )
197 memdispo_underl0 =
max(memdispo_underl0/2_8,0_8)
198 keep8(77) = keep8(77) + memdispo_underl0
199 memdispo_perthread = 0_8
200 IF (memdispo_underl0.GT.0) THEN
201 memdispo_perthread = memdispo_underl0/(int(keep(400),8))
202 ENDIF
203 DO ith = 1, keep(400)
204 mumps_tps_arr(ith)%LA = mumps_tps_arr(ith)%LA +
205 & memdispo_perthread
206 ENDDO
207 ENDIF
208 DO ith = 1, keep(400)
209 mumps_tps_arr(ith)%LRLU = mumps_tps_arr(ith)%LA
210 mumps_tps_arr(ith)%LRLUS = mumps_tps_arr(ith)%LA
211 mumps_tps_arr(ith)%LRLUSM = mumps_tps_arr(ith)%LA
212 mumps_tps_arr(ith)%IPTRLU = mumps_tps_arr(ith)%LA
213 mumps_tps_arr(ith)%POSFAC = 1_8
214 mumps_tps_arr(ith)%IWPOS = 1
215 mumps_tps_arr(ith)%IWPOSCB = mumps_tps_arr(ith)%LIW
216 ENDDO
217 IF (keep(406) .EQ. 2 ) THEN
218 ALLOCATE(state(keep(400)), size_copied(keep(400)), stat=allocok)
219 IF (allocok .GT. 0 ) THEN
220 WRITE(*,*) "Problem allocating STATE/SIZE_COPIED", keep(400)
222 ENDIF
223 CALL zmumps_perform_copies_init( state, keep8_77_save,
224 & nbwaitmem, nbfinished, nbongoingcopies, nbunderl0,
225 & keep, keep8 )
226 ENDIF
227
228
229
230
231
232
233
234
235
236
237
238 thread_id_p = 1
239
240
241
242
243 lpool_p = lpool_b_l0_omp
244 leaf = 1
245 info_p = 0
246 avoid_delayed = .false.
247 virtual_task = 0
248
249
250
251
252
254 & keep8,
255 & info_p(1), info_p(2) )
256 IF (info_p(1) .LT. 0) GOTO 700
257 ALLOCATE ( zmumps_tps_arr(thread_id_p)%A(
258 &
max(1_8,mumps_tps_arr(thread_id_p)%LA) ),
259 & stat=allocok)
260 IF (allocok.GT.0) THEN
261 info_p(1) = -13
263 & info_p(2))
264 GOTO 700
265 ELSE
267 & mumps_tps_arr(thread_id_p)%LA,
268 & keep(405).EQ.1,
269 & keep8, info_p(1), info_p(2),
270 & .false., .false. )
271 IF (info_p(1) .LT. 0) THEN
272 GOTO 700
273 ENDIF
274 ENDIF
275 to_allocate =
276 & ((int(mumps_tps_arr(thread_id_p)%LIW,8) * int(keep(34),8 )) /
277 & int(keep(35),8 ))+
278 & ((int(lpool_p,8) * int(keep(34),8 )) / int(keep(35),8 ))+
279 & ((int(n+keep(253),8) * int(keep(34),8 )) / int(keep(35),8 ))
281 & keep8, info_p(1), info_p(2) )
282 IF ( info_p(1) .LT. 0 ) GOTO 700
283 ALLOCATE ( mumps_tps_arr(thread_id_p)%IW(
284 & mumps_tps_arr(thread_id_p)%LIW ),
285 & ipool_p( lpool_p ),
286 & mumps_tps_arr(thread_id_p)%ITLOC ( n + keep(253) ),
287 & stat = allocok )
288 IF ( allocok .GT. 0 ) THEN
289 info_p(1) = -13
290 info_p(2) = mumps_tps_arr(thread_id_p)%LIW +
291 & lpool_p + n+keep(253)
292 GOTO 700
293 ELSE
295 & keep(405).EQ.1, keep8,
296 & info_p(1), info_p(2), .true., .false. )
297 IF (info_p(1) .LT. 0) THEN
298 GOTO 700
299 ENDIF
300 ENDIF
302 & .false., .false., myid_nodes, n, keep, keep8, dkeep,
303 & mumps_tps_arr(thread_id_p)%IW(1),
304 & mumps_tps_arr(thread_id_p)%LIW,
305 & zmumps_tps_arr(thread_id_p)%A(1),
306 & mumps_tps_arr(thread_id_p)%LA,
307 & mumps_tps_arr(thread_id_p)%LRLU,
308 & mumps_tps_arr(thread_id_p)%IPTRLU,
309 & mumps_tps_arr(thread_id_p)%IWPOS,
310 & mumps_tps_arr(thread_id_p)%IWPOSCB,
311 & slavef, procnode_steps, dad,
312 & ptrist, ptrast, step, pimaster,
313 & pamaster, keep(ixsz), 0_8, -444, -444, .true.,
314 &
comp, mumps_tps_arr(thread_id_p)%LRLUS,
315 & mumps_tps_arr(thread_id_p)%LRLUSM,
316 & info_p(1), info_p(2)
317 & )
319 & leaf )
320 mumps_tps_arr(thread_id_p)%ITLOC = 0
321600 CONTINUE
322 virtual_task = virtual_task + 1
323 IF ( virtual_task .LT. l_virt_l0_omp ) THEN
324 IF ( virt_l0_omp_mapping( virtual_task ) .EQ. thread_id_p ) THEN
325 DO physical_task =
326 & virt_l0_omp( virtual_task ),
327 & virt_l0_omp( virtual_task + 1 ) - 1
328 DO i = ptr_leafs_l0_omp( perm_l0_omp( physical_task )+1 ) + 1,
329 & ptr_leafs_l0_omp( perm_l0_omp( physical_task ) )
330 IF (ipool_b_l0_omp(i) .GT. 0) THEN
332 & lpool_p,
333 & procnode_steps, slavef, keep(199), keep(28), 3, 0, 1, step,
334 & ipool_b_l0_omp(i) )
335 END IF
336 END DO
337 DO WHILE (
339 & .AND. info_p(1) .GE. 0 )
341 & procnode_steps, slavef, step, inode, keep, keep8, myid_nodes,
342 & nd, .false. )
343 10 CONTINUE
344 l0_omp_mapping( step( inode ) ) = thread_id_p
345 ifath = dad( step( inode ) )
346 TYPE = 1
347 IF ( ifath .NE. 0 ) THEN
348 typef = 1
349 ELSE
350 typef = -9999
351 ENDIF
353 & inode, TYPE, TYPEF, MUMPS_TPS_ARR(THREAD_ID_P)%LA, MUMPS_TPS_ARR
354 & (THREAD_ID_P)%IW(1), MUMPS_TPS_ARR(THREAD_ID_P)%LIW,
355 & ZMUMPS_TPS_ARR(THREAD_ID_P)%A(1), MAXFRW, NOFFNEGW, NPVW,
356 & NB22T1W, NBTINYW, DET_EXPW, DET_MANTW, DET_SIGNW, INFO_P, UU,
357 & SEUIL, SEUIL_LDLT_NIV2, OPELIW, NELVAW, NMAXNPIVW, NSTEPSW,
358 & PTRIST, PTLUST_S, PTRFAC, PTRAST, STEP, PIMASTER, PAMASTER,
359 & NE, MUMPS_TPS_ARR(THREAD_ID_P)%POSFAC,
360 & MUMPS_TPS_ARR(THREAD_ID_P)%LRLU,
361 & MUMPS_TPS_ARR(THREAD_ID_P)%LRLUS, MUMPS_TPS_ARR(THREAD_ID_P)%
362 % LRLUSM, MUMPS_TPS_ARR(THREAD_ID_P)%IPTRLU, ICNTL, KEEP, KEEP8,
363 & DKEEP, PIVNUL_LIST, LPN_LIST, COMP, MUMPS_TPS_ARR(THREAD_ID_P)%
364 & IWPOS, MUMPS_TPS_ARR(THREAD_ID_P)%IWPOSCB, PROCNODE_STEPS,
365 & SLAVEF, IFATH, COMM_NODES, MYID_NODES, IPOOL_P, LPOOL_P, LEAF,
366 & PERM, NSTK_STEPS, BUFR, LBUFR, LBUFR_BYTES,
367 & NBFIN, root, OPASSW, MUMPS_TPS_ARR(THREAD_ID_P)%ITLOC(1),
368 & RHS_MUMPS, FILS, PTRARW, PTRAIW, INTARR, DBLARR, ND, FRERE, DAD,
369 & LPTRAR, NELT, FRTPTR, FRTELT, ISTEP_TO_INIV2, TAB_POS_IN_PERE,
370 & LRGROUPS, FLOP_ESTIM_ACC )
371 IF (info_p(1) .LT. 0) THEN
372 GOTO 700
373 ENDIF
374 IF ( ifath .NE. 0 ) THEN
375 IF ( phys_l0_omp( perm_l0_omp( physical_task ) )
376 & .NE. inode ) THEN
377 nstk_steps( step( ifath ) ) =
378 & nstk_steps( step( ifath ) ) - 1
379 IF ( nstk_steps( step( ifath ) ) .EQ. 0 ) THEN
380 inode = ifath
381 GOTO 10
382 ENDIF
383 ELSE
384
385 nstk_steps( step( ifath ) ) =
386 & nstk_steps( step( ifath ) ) - 1
387
388 END IF
389 ELSE
390 nbroot_processed = nbroot_processed + 1
391 END IF
392 END DO
393 END DO
394 ENDIF
395 GOTO 600
396 ENDIF
397 700 CONTINUE
398 IF (associated(mumps_tps_arr(thread_id_p)%ITLOC)) THEN
399 DEALLOCATE(mumps_tps_arr(thread_id_p)%ITLOC)
400 NULLIFY(mumps_tps_arr(thread_id_p)%ITLOC)
402 & -(int(n+keep(253),8) * int(keep(34),8 )) / int(keep(35),8),
403 & keep(405).EQ.1, keep8,
404 & info_p(1), info_p(2), .true., .false. )
405 ENDIF
406 IF (allocated(ipool_p)) THEN
407 DEALLOCATE(ipool_p);
409 & -(int(lpool_p,8) * int(keep(34),8 )) / int(keep(35),8),
410 & keep(405).EQ.1, keep8,
411 & info_p(1), info_p(2), .true., .false. )
412 ENDIF
413 IF ( keep(406) .EQ. 2) THEN
414 CALL zmumps_perform_copies( thread_id_p,
415 & mumps_tps_arr, zmumps_tps_arr,
416 & l0_omp_factors, ll0_omp_factors,
417 & state, size_copied,
418 & nbwaitmem, nbfinished, nbongoingcopies, nbunderl0,
419 & myid_nodes, n, slavef,
420 & step, ptrast, pamaster, procnode_steps, dad,
421 & keep, keep8, info_p
422 & )
423 ELSE
424 IF ((keep(407) .EQ. 1) .OR. (keep(406) .EQ.1) ) THEN
425 IF (info_p(1) .GE. 0) THEN
427 & (2,
428 & 0_8,
429 & .false.,
430 & myid_nodes, n, slavef, keep, keep8,
431 & mumps_tps_arr(thread_id_p)%IW(1),
432 & mumps_tps_arr(thread_id_p)%LIW,
433 & mumps_tps_arr(thread_id_p)%IWPOSCB,
434 & mumps_tps_arr(thread_id_p)%IWPOS,
435 & zmumps_tps_arr(thread_id_p)%A(1),
436 & mumps_tps_arr(thread_id_p)%LA,
437 & mumps_tps_arr(thread_id_p)%LRLU,
438 & mumps_tps_arr(thread_id_p)%IPTRLU,
439 & mumps_tps_arr(thread_id_p)%LRLUS,
440 & step, ptrast, pamaster, procnode_steps, dad,
441 & info_p(1), info_p(2) )
442 ENDIF
443 ENDIF
444 IF (keep(406) .EQ.1) THEN
445 IF (info_p(1) .GE.0 )THEN
446 to_allocate =
max(mumps_tps_arr(thread_id_p)%POSFAC-1,1_8)
448 & keep8, info_p(1), info_p(2) )
449 ENDIF
450 IF (info_p(1) .GE.0 )THEN
451 ALLOCATE(l0_omp_factors(thread_id_p)%A(to_allocate),
452 & stat=allocok)
453 IF (allocok .GT. 0) THEN
454 info_p(1) = -13
456 l0_omp_factors(thread_id_p)%LA = 0_8
457 ELSE
458 l0_omp_factors(thread_id_p)%LA =
459 & mumps_tps_arr(thread_id_p)%POSFAC-1_8
461 & l0_omp_factors(thread_id_p)%LA, keep(405).EQ.1, keep8,
462 & info_p(1), info_p(2), .true., .false. )
463 ENDIF
464 ENDIF
465 IF (info_p(1) .GE.0 ) THEN
466 DO i8 = 1_8, mumps_tps_arr(thread_id_p)%POSFAC-1_8
467 l0_omp_factors(thread_id_p)%A(i8) =
468 & zmumps_tps_arr(thread_id_p)%A(i8)
469 ENDDO
470 ENDIF
471 IF ( associated(zmumps_tps_arr(thread_id_p)%A)) THEN
472 DEALLOCATE(zmumps_tps_arr(thread_id_p)%A)
473 NULLIFY(zmumps_tps_arr(thread_id_p)%A)
475 & -mumps_tps_arr(thread_id_p)%LA,
476 & keep(405).EQ.1,
477 & keep8,
478 & info_p(1), info_p(2),
479 & .false., .false. )
480 IF (info_p(1) .GE. 0) THEN
481
482 keep8(69) = keep8(69) - l0_omp_factors(thread_id_p)%LA
483
484 ENDIF
485 ENDIF
486 ENDIF
487 ENDIF
488 IF (info_p(1) .LT.0) THEN
489
490 info(1) = info_p(1)
491 info(2) = info_p(2)
492
493 ELSE IF (info_p(1) .GE. 0) THEN
494
495 IF (info(1) .EQ. 0) THEN
496 info(1) = info_p(1)
497 info(2) = info_p(2)
498 ENDIF
499
500 ENDIF
501#if defined(WORKAROUNDINTELILP64OPENMPLIMITATION)
502
503#else
504
505#endif
506
507 IF (info(1) .LT. 0) THEN
508 IF (icntl(1) .GT. 0 .AND. icntl(4) .GE.1 ) THEN
509 WRITE(icntl(1),'(A,I6,I16,A,I5,A)')
510 & "** ERROR DURING L0_OMP: INFO(1:2)=",
511 & info(1), info(2), " (MPI worker ", myid_nodes,")"
512 ENDIF
513 ENDIF
514 IF ( keep(406) .EQ. 0 ) THEN
515 ALLOCATE(
id(keep(400)), val(keep(400)),
516 & stat = allocok)
517 IF ( allocok .GT. 0 ) THEN
518 info(1) = -13
519 info(2) = keep(400)
520 GOTO 800
521 ENDIF
522 DO mythread_id = 1, keep(400)
523 val(mythread_id) = mumps_tps_arr( mythread_id )%POSFAC-1_8
524 id(mythread_id) = mythread_id
525 ENDDO
527 DO ith=1, keep(400)
528 mythread_id =
id(ith)
529 IF ((keep(407).NE.1) .AND. (keep(406).EQ.0)) THEN
530 IF (info(1) .GE. 0) THEN
532 & (2,
533 & 0_8,
534 & .false.,
535 & myid_nodes, n, slavef, keep, keep8,
536 & mumps_tps_arr(mythread_id)%IW(1),
537 & mumps_tps_arr(mythread_id)%LIW,
538 & mumps_tps_arr(mythread_id)%IWPOSCB,
539 & mumps_tps_arr(mythread_id)%IWPOS,
540 & zmumps_tps_arr(mythread_id)%A(1),
541 & mumps_tps_arr(mythread_id)%LA,
542 & mumps_tps_arr(mythread_id)%LRLU,
543 & mumps_tps_arr(mythread_id)%IPTRLU,
544 & mumps_tps_arr(mythread_id)%LRLUS,
545 & step, ptrast, pamaster, procnode_steps, dad,
546 & info(1), info(2) )
547 ENDIF
548 ENDIF
549 IF (keep(406).EQ.0) THEN
550 IF (info(1) .GE. 0 )THEN
551 to_allocate =
max(mumps_tps_arr(mythread_id)%POSFAC-1,1_8)
553 & keep8, info(1), info(2) )
554 ENDIF
555 IF (info(1) .GE.0 ) THEN
556 ALLOCATE(l0_omp_factors(mythread_id)%A(to_allocate),
557 & stat=allocok)
558 IF (allocok .GT. 0) THEN
559 info(1) = -13
561 l0_omp_factors(mythread_id)%LA = 0_8
562 ELSE
563 l0_omp_factors(mythread_id)%LA =
564 & mumps_tps_arr(mythread_id)%POSFAC-1_8
566 & l0_omp_factors(mythread_id)%LA,
567 & keep(405).EQ.1, keep8,
568 & info(1), info(2), .true., .false. )
569 ENDIF
570 ENDIF
571 IF (info(1) .GE. 0) THEN
572
573
574
575
576
577
578
579
580
581 DO i8 = 1_8, mumps_tps_arr(mythread_id)%POSFAC-1_8
582 l0_omp_factors(mythread_id)%A(i8) =
583 & zmumps_tps_arr(mythread_id)%A(i8)
584 ENDDO
585
586 ENDIF
587 IF ( associated(zmumps_tps_arr(mythread_id)%A)) THEN
588 DEALLOCATE(zmumps_tps_arr(mythread_id)%A)
589 NULLIFY(zmumps_tps_arr(mythread_id)%A)
591 & -mumps_tps_arr(mythread_id)%LA,
592 & keep(405).EQ.1, keep8,
593 & info(1), info(2),
594 & .false., .false. )
595 IF (info(1).GE.0) THEN
596 keep8(69) = keep8(69) - l0_omp_factors(mythread_id)%LA
597 ENDIF
598 ENDIF
599 ENDIF
600 ENDDO
601 IF (
ALLOCATED(
id))
DEALLOCATE(
id)
602 IF (ALLOCATED(val)) DEALLOCATE(val)
603 ENDIF
604 800 CONTINUE
605 keep8(64) = 0_8
606 DO i = 1, keep(400)
607 keep8(64) = keep8(64) + mumps_tps_arr(i)%POSFAC - 1_8
608 ENDDO
609 keep8(62) = 0_8
610 DO i = 1, keep(400)
611 keep8(62) = keep8(62) + mumps_tps_arr(i)%LRLUSM
612 ENDDO
613 nbroot_under_l0 = nbroot_processed
643 RETURN
double precision function mpi_wtime()
integer function numroc(n, nb, iproc, isrcproc, nprocs)
subroutine zmumps_dm_fac_alloc_allowed(mem_count_to_allocate, keep8, iflag, ierror)
subroutine, public mumps_load_disable()
subroutine, public mumps_load_enable()
subroutine, public zmumps_load_update(check_flops, process_bande, inc_load, keep, keep8)
double precision time_decomp_ucfs
double precision time_update
double precision time_update_frfr
double precision time_frfronts
double precision time_update_lrlr2
double precision time_frtrsm
double precision time_decomp_maplig1
double precision time_decomp_asms2s
double precision time_frswap_compress
double precision time_panel
double precision time_update_lrlr1
double precision time_cb_compress
double precision time_decomp
double precision time_decomp_asm1
double precision time_decomp_locasm2
double precision time_compress
double precision time_midblk_compress
double precision time_update_frlr
double precision time_decomp_asms2m
double precision time_update_lrlr3
double precision time_fac_sq
double precision time_lrtrsm
double precision time_fac_i
double precision time_diagcopy
double precision time_fac_mq
double precision time_lr_module
subroutine zmumps_alloc_cb(inplace, min_space_in_place, ssarbr, process_bande, myid, n, keep, keep8, dkeep, iw, liw, a, la, lrlu, iptrlu, iwpos, iwposcb, slavef, procnode_steps, dad, ptrist, ptrast, step, pimaster, pamaster, lreq, lreqcb, node_arg, state_arg, set_header, comp, lrlus, lrlusm, iflag, ierror)
subroutine zmumps_dm_cbstatic2dynamic_i(strategy, sizer_needed, skip_top_stack, myid, n, slavef, keep, keep8, iw, liw, iwposcb, iwpos, a, la, lrlu, iptrlu, lrlus, step, ptrast, pamaster, procnode_steps, dad, iflag, ierror)
recursive subroutine zmumps_process_front_niv1(comm_load, ass_irecv, n, inode, type, typef, la, iw, liw, a, maxfrw, noffnegw, npvw, nb22t1w, nbtinyw, det_expw, det_mantw, det_signw, info_p, uu, seuil, seuil_ldlt_niv2, opeliw, nelvaw, nmaxnpivw, nstepsw, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, ne, posfac, lrlu, lrlus, lrlusm, iptrlu, icntl, keep, keep8, dkeep, pivnul_list, lpn_list, comp, iwpos, iwposcb, procnode_steps, slavef, ifath, comm_nodes, myid_nodes, ipool_p, lpool_p, leaf, perm, nstk_steps, bufr, lbufr, lbufr_bytes, nbfin, root, opassw, itloc, rhs_mumps, fils, ptrarw, ptraiw, intarr, dblarr, nd, frere, dad, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups, flop_estim_acc)
subroutine zmumps_extract_pool(n, pool, lpool, procnode, slavef, step, inode, keep, keep8, myid, nd, force_extract_top_sbtr)
logical function zmumps_pool_empty(pool, lpool)
subroutine zmumps_init_pool_last3(ipool, lpool, leaf)
subroutine zmumps_insert_pool_n(n, pool, lpool, procnode, slavef, keep199, k28, k76, k80, k47, step, inode)