17 & ND, FILS, STEP, FRERE, DAD, CAND, ISTEP_TO_INIV2,
18 & TAB_POS_IN_PERE, NSTEPSDONE, OPASS, OPELI, NELVA, COMP, MAXFRT,
19 & NMAXNPIV, NTOTPV, NOFFNEGPV, NB22T1, NB22T2, NBTINY, DET_EXP,
20 & DET_MANT, DET_SIGN, PTRIST, PTRAST, PIMASTER, PAMASTER,
21 & PTRARW, PTRAIW, ITLOC, RHS_MUMPS, IPOOL, LPOOL,
22 & L0_OMP_MAPPING, LL0_OMP_MAPPING,
23 & MUMPS_TPS_ARR, CMUMPS_TPS_ARR, LTPS_ARR,
24 & RINFO, POSFAC ,IWPOS, LRLU, IPTRLU, LRLUS, LEAF, NBROOT, NBRTOT,
26 & UU, ICNTL, PTLUST, PTRFAC, INFO, KEEP,KEEP8, PROCNODE_STEPS,
27 & SLAVEF,MYID, COMM_NODES, MYID_NODES, BUFR, LBUFR, LBUFR_BYTES,
28 & INTARR, DBLARR, root, PERM, NELT, FRTPTR, FRTELT, LPTRAR,
29 & COMM_LOAD, ASS_IRECV, SEUIL, SEUIL_LDLT_NIV2, MEM_DISTRIB, NE,
30 & DKEEP, PIVNUL_LIST, LPN_LIST, LRGROUPS )
47 TYPE (CMUMPS_ROOT_STRUC) :: root
48 INTEGER N, LIW, LPTRAR, NSTEPSDONE,
49DOUBLE PRECISION,
INTENT(INOUT) :: OPASS, OPELI
50 INTEGER,
INTENT(INOUT) :: NELVA, COMP
51 INTEGER,
INTENT(INOUT) :: MAXFRT, NTOTPV, NMAXNPIV, NOFFNEGPV
52 INTEGER,
INTENT(INOUT) :: NB22T1, NB22T2, NBTINY
53 INTEGER,
INTENT(INOUT) :: DET_SIGN, DET_EXP
54 COMPLEX,
INTENT(INOUT) :: DET_MANT
56 COMPLEX,
TARGET :: A(LA)
57 INTEGER SLAVEF, , MYID, MYID_NODES
58 INTEGER,
DIMENSION(0: SLAVEF - 1) :: MEM_DISTRIB
59 INTEGER KEEP(500), ICNTL(60)
62 INTEGER PROCNODE_STEPS(KEEP(28))
63 INTEGER ITLOC(N+KEEP(253))
64 COMPLEX :: RHS_MUMPS(KEEP(255))
65 INTEGER IW(LIW), NSTK_STEPS(KEEP(28))
66 INTEGER(8),
INTENT(IN) :: PTRARW(LPTRAR), PTRAIW(LPTRAR)
68 INTEGER FILS(N),PTRIST(KEEP(28))
69 INTEGER STEP(N), FRERE(KEEP(28)), DAD(KEEP(28))
70 INTEGER PIMASTER(KEEP(28))
71 INTEGER PTLUST(KEEP(28)), PERM(N)
72 INTEGER CAND(SLAVEF+1,max(1,KEEP(56)))
73 INTEGER ISTEP_TO_INIV2(KEEP(71)),
74 & tab_pos_in_pere(slavef+2,max(1,keep(56)))
78 INTEGER(8) :: PAMASTER(KEEP(28)), PTRAST(KEEP(28))
79 INTEGER(8) :: PTRFAC(KEEP(28))
80 INTEGER(8) :: POSFAC, LRLU, LRLUS, IPTRLU
81 INTEGER IWPOS, LEAF, NBROOT, NBRTOT
82 INTEGER,
INTENT(in) :: NBROOT_UNDER_L0
84 REAL UU, SEUIL, SEUIL_LDLT_NIV2
86 INTEGER FRTPTR( N+1 ), FRTELT( NELT )
87 INTEGER LBUFR, LBUFR_BYTES
89 COMPLEX DBLARR( KEEP8(26) )
90 INTEGER INTARR( KEEP8(27) )
91 LOGICAL IS_ISOLATED_NODE
93 INTEGER PIVNUL_LIST(LPN_LIST)
96 INTEGER,
INTENT( IN ) :: LTPS_ARR
97 TYPE (MUMPS_TPS_T),
TARGET :: MUMPS_TPS_ARR( LTPS_ARR )
98 TYPE (CMUMPS_TPS_T),
TARGET :: CMUMPS_TPS_ARR( LTPS_ARR )
99 INTEGER,
INTENT( IN ) :: LL0_OMP_MAPPING
100 INTEGER,
INTENT( IN ) :: L0_OMP_MAPPING( LL0_OMP_MAPPING )
102 include
'mumps_tags.h'
103 INTEGER :: STATUS(MPI_STATUS_SIZE)
105 DOUBLE PRECISION,
PARAMETER :: DZERO = 0.0d0, done = 1.0d0
109 INTEGER MP, LP, DUMMY(1)
110 INTEGER NBFIN, NBROOT_TRAITEES
111 INTEGER NFRONT, IOLDPS, NASS, HF, XSIZE
112 INTEGER(8) :: NFRONT8
114 INTEGER IPOSROOT, IPOSROOTROWINDICES
117 COMPLEX,
POINTER,
DIMENSION(:) :: BUFRX
118 LOGICAL :: IS_BUFRX_ALLOCATED
119 DOUBLE PRECISION FLOP1
121 LOGICAL SON_LEVEL2, SET_IRECV, BLOCKING,
123 LOGICAL AVOID_DELAYED
126 INTEGER LOCAL_M, LOCAL_N
127 INTEGER LRHS_CNTR_MASTER_ROOT, FWD_LOCAL_N_RHS
130 INTEGER MUMPS_TYPENODE, MUMPS_PROCNODE
131 LOGICAL MUMPS_INSSARBR,MUMPS_ROOTSSARBR
132 EXTERNAL mumps_inssarbr,mumps_rootssarbr
133 LOGICAL CMUMPS_POOL_EMPTY
135 LOGICAL STACK_RIGHT_AUTHORIZED
138 INTEGER JOBASS, ETATASS
140 INTEGER LIWFAC, STRAT, TYPEFile, NextPiv2beWritten,
143 TYPE(io_block) :: MonBloc
144 include
'mumps_headers.h'
146 DOUBLE PRECISION OPLAST_PRINTED
149#if defined(multicore_profiling)
150 DOUBLE PRECISION :: LATIME, LFTIME, LSTIME
151 DOUBLE PRECISION :: GATIME, GFTIME, GSTIME
156 dummy_flop_estim_acc = 0.0d0
157 itloc(1:n+keep(253)) =0
158 ass_irecv = mpi_request_null
163 is_bufrx_allocated = .false.
165 IF ( info(1) .LT. 0 )
THEN
168 oplast_printed = done
170 IF (icntl(4).LT.2) mpa=0
175 & oplast_printed, mpa)
176 stack_right_authorized = .true.
178 & .false., .false., myid_nodes, n, keep
179 & iw, liw, a, la, lrlu, iptrlu, iwpos, iwposcb,
180 & slavef, procnode_steps, dad,
181 & ptrist, ptrast, step, pimaster,
182 & pamaster, keep(ixsz), 0_8, -444, -444, .true.,
183 & comp, lrlus, keep8(67),
191 IF ( keep(38).NE.0 )
THEN
194 & root, keep(38), n, iw, liw,
196 & fils, dad, myid_nodes, slavef, procnode_steps,
197 & lptrar, nelt, frtptr, frtelt,
201 & iwpos, iwposcb, ptrist, ptrast,
202 & step, pimaster, pamaster, itloc, rhs_mumps,
203 & comp, lrlus, info(1), keep,keep8, dkeep, info(2) )
205 IF ( info(1) .LT. 0 )
GOTO 635
207 IF (keep(400).GT.0)
THEN
208 nbroot_traitees = nbroot_under_l0
209 IF (nbroot_traitees .GT.0)
THEN
210 IF (nbroot_traitees.EQ.nbroot)
THEN
211 nbfin = nbfin - nbroot
212 IF (slavef .GT. 1)
THEN
214 & myid_nodes,
comm_nodes, racine, slavef, keep )
218 IF (nbfin .EQ. 0)
GOTO 640
225 message_received = .false.
227 & comm_load, ass_irecv, blocking, set_irecv,
229 & mpi_any_source, mpi_any_tag,
230 & status, bufr, lbufr,
231 & lbufr_bytes, procnode_steps, posfac,
232 & iwpos, iwposcb, iptrlu,
233 & lrlu, lrlus, n, iw, liw, a, la,
234 & ptrist, ptlust, ptrfac,
235 & ptrast, step, pimaster, pamaster, nstk_steps,
237 & ipool, lpool, leaf, nbfin, myid_nodes, slavef,
238 & root, opass, opeli, itloc, rhs_mumps, fils, dad,
240 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere,
241 & lptrar, nelt, frtptr, frtelt,
242 & istep_to_iniv2, tab_pos_in_pere,
243 & stack_right_authorized
251 & oplast_printed, mpa)
252 IF (message_received)
THEN
253 IF ( info(1) .LT. 0 )
GO TO 640
254 IF ( nbfin .eq. 0 )
GOTO 640
256 IF ( .NOT. cmumps_pool_empty( ipool, lpool) )
THEN
259 & slavef, step, inode, keep,keep8, myid_nodes, nd,
260 & (.NOT. stack_right_authorized) )
261 stack_right_authorized = .true.
262 IF (keep(47) .GE. 3)
THEN
265 & procnode_steps, keep,keep8, slavef, comm_load,
266 & myid_nodes, step, n, nd, fils )
268 IF (keep(47).EQ.4)
THEN
269 IF(inode.GT.0.AND.inode.LE.n)
THEN
270 IF((ne(step(inode)).EQ.0).AND.
271 & (frere(step(inode)).EQ.0))
THEN
272 is_isolated_node=.true
274 is_isolated_node=.false.
278 & is_isolated_node,inode,ipool,lpool,
279 & myid_nodes,slavef,comm_load,keep,keep8)
281 IF ((( keep(80) == 2 .OR. keep(80)==3 ) .AND.
282 & ( keep(47) == 4 )).OR.
283 & (keep(80) == 1 .AND. keep(47) .GE. 1))
THEN
285 & procnode_steps,frere,nd,comm_load,slavef,
286 & myid_nodes,keep,keep8,n)
293 IF ( inode .LT. 0 )
THEN
295 fpere = dad(step(inode))
297 ELSE IF (inode.GT.n)
THEN
299 IF (inode.EQ.keep(38))
THEN
300 nbroot_traitees = nbroot_traitees + 1
301 IF ( nbroot_traitees .EQ. nbroot )
THEN
302 nbfin = nbfin - nbroot
303 IF (slavef.GT.1)
THEN
309 IF (nbfin.EQ.0)
GOTO 640
312 TYPE = mumps_typenode(procnode_steps(step(inode)),keep(199))
313 IF (type.EQ.1)
GOTO 100
314 fpere = dad(step(inode))
315 avoid_delayed = ( (fpere
316 & .AND. keep(60).ne.0 )
317 IF ( keep(50) .eq. 0 )
THEN
319 & n, inode, fpere, iw, liw, a, la, uu,
320 & noffnegpv, ntotpv, nbtiny,
321 & det_exp, det_mant, det_sign,
322 &
comm_nodes, myid_nodes, bufr, lbufr,lbufr_bytes,
323 & nbfin,leaf, info(1), info(2), ipool,lpool,
324 & slavef, posfac, iwpos, iwposcb, iptrlu, lrlu,
325 & lrlus, comp, ptrist, ptrast, ptlust, ptrfac,
326 & step, pimaster, pamaster,
327 & nstk_steps,perm,procnode_steps,
328 & root, opass, opeli, itloc, rhs_mumps,
329 & fils, dad, ptrarw, ptraiw,
330 & intarr, dblarr, icntl, keep,keep8, nd, frere,
331 & lptrar, nelt, frtptr, frtelt, seuil,
332 & istep_to_iniv2, tab_pos_in_pere, avoid_delayed,
333 & dkeep(1),pivnul_list(1),lpn_list
336 IF ( info(1) .LT. 0 )
GOTO 640
341 & oplast_printed, mpa)
344 & n, inode, fpere, iw, liw, a, la, uu,
346 & nb22t2, nbtiny, det_exp, det_mant, det_sign,
347 &
comm_nodes, myid_nodes, bufr, lbufr,lbufr_bytes,
348 & nbfin,leaf, info(1), info(2), ipool,lpool,
349 & slavef, posfac, iwpos, iwposcb, iptrlu, lrlu,
350 & lrlus, comp, ptrist, ptrast, ptlust, ptrfac,
351 & step, pimaster, pamaster,
352 & nstk_steps,perm,procnode_steps,
353 & root, opass, opeli, itloc, rhs_mumps,
354 & fils, dad, ptrarw, ptraiw,
355 & intarr, dblarr, icntl, keep,keep8, nd, frere,
356 & lptrar, nelt, frtptr, frtelt, seuil_ldlt_niv2,
357 & istep_to_iniv2, tab_pos_in_pere, avoid_delayed,
358 & dkeep(1),pivnul_list(1),lpn_list
361 IF ( info(1) .LT. 0 )
GOTO 640
366 & oplast_printed, mpa)
367 IF ( iw( ptlust(step(inode)) + keep(ixsz) + 5 ) .GT. 1 )
THEN
373 IF (inode.EQ.keep(38))
THEN
377 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
378 & iwpos, iwposcb, iptrlu,
379 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
381 & ptrast, step, pimaster, pamaster, nstk_steps, comp,
384 & ipool, lpool, leaf,
385 & nbfin, myid_nodes, slavef,
387 & opass, opeli, itloc
388 & fils, dad, ptrarw, ptraiw,
389 & intarr, dblarr,icntl,keep,keep8,dkeep, nd,
390 & lptrar, nelt, frtptr, frtelt,
391 & istep_to_iniv2, tab_pos_in_pere
394 IF ( info(1) .LT. 0 )
GOTO 640
399 & oplast_printed, mpa)
402 TYPE = mumps_typenode(procnode_steps(step(inode)),keep(199))
404 IF (keep(55).NE.0)
THEN
406 & nelt, frtptr, frtelt,
407 & n,inode,iw,liw,a,la,
409 & fils,frere,dad,maxfrt,root,opass, opeli,
410 & ptrist,ptlust,ptrfac,ptrast,step, pimaster,pamaster,
412 & itloc, rhs_mumps, nstepsdone, son_level2,
413 & comp, lrlu, iptrlu,
414 & iwpos,iwposcb, posfac, lrlus, keep8(67),
415 & icntl, keep,keep8,dkeep,
416 & intarr,keep8(27),dblarr,keep8(26),
417 & nstk_steps,procnode_steps, slavef,
419 & bufr, lbufr, lbufr_bytes, nbfin, ipool, lpool, leaf,
420 & perm, istep_to_iniv2, tab_pos_in_pere
422 & , mumps_tps_arr, cmumps_tps_arr,
428 & n,inode,iw,liw,a,la,
430 & fils,frere,dad,maxfrt,root,opass, opeli,
431 & ptrist,ptlust,ptrfac,ptrast,step, pimaster,pamaster,
433 & itloc, rhs_mumps, nstepsdone, son_level2,
434 & comp, lrlu, iptrlu,
435 & iwpos,iwposcb, posfac, lrlus, keep8(67),
436 & icntl, keep,keep8,dkeep, intarr,keep8(27),
438 & nstk_steps,procnode_steps, slavef,
440 & bufr, lbufr, lbufr_bytes, nbfin, ipool, lpool, leaf,
442 & istep_to_iniv2, tab_pos_in_pere, jobass,etatass
444 & , mumps_tps_arr, cmumps_tps_arr,
452 & oplast_printed, mpa)
453 IF ( info(1) .LT. 0 )
GOTO 640
454 IF ((iw(ptlust(step(inode))+xxnbpr).GT.0).OR.(son_level2))
THEN
458 IF ( keep(55) .eq. 0 )
THEN
460 & n, inode, iw, liw, a, la,
462 & nd, fils, frere, dad, cand,
463 & istep_to_iniv2, tab_pos_in_pere,
465 & root, opass, opeli, ptrist, ptlust, ptrfac,
466 & ptrast, step, pimaster, pamaster, ptrarw, nstk_steps,
467 & ptraiw, itloc, rhs_mumps, nstepsdone,
468 & comp, lrlu, iptrlu, iwpos, iwposcb, posfac, lrlus,
469 & icntl, keep,keep8,dkeep,intarr,keep8(27),dblarr,keep8(26),
472 & bufr, lbufr, lbufr_bytes,
473 & nbfin, leaf, ipool, lpool, perm,
479 & nelt, frtptr, frtelt,
480 & n, inode, iw, liw, a, la, info(1),
481 & nd, fils, frere, dad, cand,
482 & istep_to_iniv2, tab_pos_in_pere,
484 & root, opass, opeli, ptrist, ptlust, ptrfac,
485 & ptrast, step, pimaster, pamaster, ptrarw, nstk_steps,
486 & ptraiw, itloc, rhs_mumps, nstepsdone,
487 & comp, lrlu, iptrlu, iwpos, iwposcb, posfac, lrlus,
488 & icntl, keep,keep8,dkeep,intarr,keep8(27),dblarr,keep8(26),
491 & bufr, lbufr, lbufr_bytes,
492 & nbfin, leaf, ipool, lpool, perm,
501 & oplast_printed, mpa)
502 IF (info(1).LT.0)
GOTO 640
506 fpere = dad(step(inode))
507 IF ( inode .eq. keep(20) )
THEN
508 poselt = ptrast(step(inode))
509 IF (ptrfac(step(inode)).NE.poselt)
THEN
510 WRITE(*,*)
"ERROR 2 in CMUMPS_FAC_PAR", poselt
514 & ( iw(ptlust(step(inode))+keep(ixsz)), keep(253) )
517 poselt = ptrast(step(inode))
518 ioldps = ptlust(step(inode))
520 hf = 6 + iw(ioldps+5+xsize)+xsize
521 nfront = iw(ioldps+xsize)
522 nass = iabs(iw(ioldps+2+xsize))
523 avoid_delayed = ( (fpere .eq. keep(20) .OR. fpere
524 & .AND. keep(60).ne.0 )
525 IF (keep(50).EQ.0)
THEN
527 & n, inode, iw, liw, a, la,
529 & info(1), info(2), uu, noffnegpv, ntotpv, nbtiny,
530 & det_exp, det_mant, det_sign,
532 & step, procnode_steps, myid_nodes, slavef,
533 & seuil, avoid_delayed, etatass,
534 & dkeep(1),pivnul_list(1),lpn_list, iwpos
538 IF (info(1).LT.0)
GOTO 635
539#if defined(multicore_profiling)
541 gftime = gftime + lftime
542 WRITE(*,*)
'FAC ',lftime
545 iw( ioldps+4+keep(ixsz) ) = 1
549 & info(1), info(2), uu, noffnegpv, ntotpv,
550 & nb22t1, nbtiny, det_exp, det_mant, det_sign,
551 & keep,keep8, myid_nodes, seuil, avoid_delayed,
553 & dkeep(1),pivnul_list(1),lpn_list, iwpos
557 IF (info(1).LT.0)
GOTO 635
558 iw( ioldps+4+keep(ixsz) ) = step(inode)
561 IF (jobass.EQ.1)
THEN
562#if defined(multicore_profiling)
566 & n,inode,iw,liw,a,la,
568 & fils,frere,dad,maxfrt,root,opass, opeli,
569 & ptrist,ptlust,ptrfac,ptrast,step,pimaster,pamaster,
571 & itloc, rhs_mumps, nstepsdone, son_level2,
572 & comp, lrlu, iptrlu,
573 & iwpos,iwposcb, posfac
574 & icntl, keep,keep8,dkeep,intarr,keep8(27),dblarr,keep8(26),
575 & nstk_steps, procnode_steps, slavef,
577 & bufr, lbufr, lbufr_bytes, nbfin, ipool, lpool, leaf,
579 & istep_to_iniv2, tab_pos_in_pere,
583#if defined(multicore_profiling)
585 gatime = gatime + latime
586 WRITE(*,*)
'ASS ',latime
593 & oplast_printed, mpa)
594 IF (info(1).LT.0)
GOTO 635
596 TYPE = mumps_typenode(procnode_steps(step(inode)),keep(199))
597 IF ( fpere .NE. 0 )
THEN
598 typef = mumps_typenode(procnode_steps(step(fpere)),keep(199))
602#if defined(multicore_profiling)
606 & n,inode,
TYPE,typef,la,iw,liw,a,
607 & info(1),INFO(2),OPELI,NELVA,,
608 & ptrist,ptlust,ptrfac,
609 & ptrast, step, pimaster, pamaster,
610 & ne, posfac,lrlu, lrlus,keep8(67),
611 & iptrlu,icntl,keep,keep8,dkeep,comp,iwpos,iwposcb,
612 & procnode_steps,slavef,fpere,
comm_nodes,myid_nodes,
613 & ipool, lpool, leaf,
614 & nstk_steps, perm, bufr, lbufr, lbufr_bytes, nbfin,
615 & root, opass, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw,
617 & nd, frere, lptrar, nelt, frtptr, frtelt,
618 & istep_to_iniv2, tab_pos_in_pere
620 & ,dummy_flop_estim_acc
622#if defined(multicore_profiling)
624 gstime = gstime + lstime
625 WRITE(*,*)
'STK ',lstime
631 & oplast_printed, mpa)
632 IF (info(1).LT.0)
GOTO 640
634 IF ( inode .eq. keep(38) )
THEN
635 WRITE(*,*)
'Error .. in CMUMPS_FAC_PAR: ',
636 & ' inode == keep(38)
'
639.EQ.
IF ( FPERE0 ) THEN
640 NBROOT_TRAITEES = NBROOT_TRAITEES + 1
641.EQ.
IF ( NBROOT_TRAITEES NBROOT ) THEN
642.EQ.
IF (KEEP(201)1) THEN
643 CALL CMUMPS_OOC_FORCE_WRT_BUF_PANEL(IERR)
644.EQ.
ELSE IF ( KEEP(201)2) THEN
645 CALL CMUMPS_FORCE_WRITE_BUF(IERR)
647 NBFIN = NBFIN - NBROOT
648.LT.
IF ( NBFIN 0 ) THEN
653.LT.
IF ( NBROOT 0 ) THEN
658.GT.
IF (SLAVEF1) THEN
660 CALL CMUMPS_MCAST2( DUMMY(1), 1, MPI_INTEGER,
661 & MYID_NODES, COMM_NODES, RACINE, SLAVEF, KEEP )
667.NE..AND.
ELSEIF ( FPEREKEEP(38)
668 & MUMPS_PROCNODE(PROCNODE_STEPS(STEP(FPERE)),
669.EQ.
& KEEP(199)) MYID_NODES ) THEN
670 NSTK_STEPS(STEP(FPERE)) = NSTK_STEPS(STEP(FPERE))-1
671.EQ.
IF ( NSTK_STEPS( STEP( FPERE ))0) THEN
672.NE..AND.
IF (KEEP(234)0
673 & MUMPS_INSSARBR(PROCNODE_STEPS(STEP(INODE)),KEEP(199)))
675 STACK_RIGHT_AUTHORIZED = .FALSE.
677 CALL CMUMPS_INSERT_POOL_N(N, IPOOL, LPOOL,
678 & PROCNODE_STEPS, SLAVEF, KEEP(199), KEEP(28), KEEP(76),
679 & KEEP(80), KEEP(47), STEP, FPERE )
680.GE.
IF (KEEP(47) 3) THEN
681 CALL CMUMPS_LOAD_POOL_UPD_NEW_POOL(
683 & PROCNODE_STEPS, KEEP,KEEP8, SLAVEF, COMM_LOAD,
684 & MYID_NODES, STEP, N, ND, FILS )
686 CALL MUMPS_ESTIM_FLOPS( FPERE, N, PROCNODE_STEPS,KEEP(199),
687 & ND, FILS, FRERE, STEP, PIMASTER, KEEP(28),
688 & KEEP(50), KEEP(253), FLOP1,
689 & IW, LIW, KEEP(IXSZ) )
690.NE.
IF (FPEREKEEP(20))
691 & CALL CMUMPS_LOAD_UPDATE(1,.FALSE.,FLOP1,KEEP,KEEP8)
696 CALL CMUMPS_BDC_ERROR( MYID_NODES, SLAVEF, COMM_NODES, KEEP )
698 CALL CMUMPS_CANCEL_IRECV( INFO(1),
700 & ASS_IRECV, BUFR, LBUFR,
703 & MYID_NODES, SLAVEF)
704 CALL CMUMPS_CLEAN_PENDING( INFO(1), KEEP,
707 & COMM_NODES, COMM_LOAD, SLAVEF,
710 CALL MPI_BARRIER( COMM_NODES, IERR )
711.LT.
IF (INFO(1) 0) THEN
712 CALL CMUMPS_DM_FREEALLDYNAMICCB( MYID, N, SLAVEF, KEEP, KEEP8,
713 & IW, LIW, IWPOSCB, IWPOS,
714 & STEP, PTRAST, PAMASTER, PROCNODE_STEPS, DAD,
716.GT.
IF (KEEP(400) 0) THEN
717!$OMP PARALLEL DO SCHEDULE(STATIC,1)
718 DO ITH = 1, KEEP(400)
719 IF (associated(MUMPS_TPS_ARR(ITH)%IW)) THEN
720 CALL CMUMPS_DM_FREEALLDYNAMICCB_I( MYID, N, SLAVEF,
722 & MUMPS_TPS_ARR(ITH)%IW(1), MUMPS_TPS_ARR(ITH)%LIW,
723 & MUMPS_TPS_ARR(ITH)%IWPOSCB, MUMPS_TPS_ARR(ITH)%IWPOS,
724 & STEP, PTRAST, PAMASTER, PROCNODE_STEPS, DAD,
731.GE.
IF ( INFO(1) 0 ) THEN
732.NE..OR..NE.
IF( KEEP(38) 0 KEEP(20)0) THEN
733 MASTER_ROOT = MUMPS_PROCNODE(
734 & PROCNODE_STEPS(STEP(max(KEEP(38),KEEP(20)))),
736.EQ.
ROOT_OWNER = (MASTER_ROOT MYID_NODES)
737.NE.
IF ( KEEP(38) 0 ) THEN
738.EQ.
IF (KEEP(60)0) THEN
739 IOLDPS = PTLUST(STEP(KEEP(38)))
740 LOCAL_M = IW(IOLDPS+2+KEEP(IXSZ))
741 LOCAL_N = IW(IOLDPS+1+KEEP(IXSZ))
744 LOCAL_M = root%SCHUR_MLOC
745 LOCAL_N = root%SCHUR_NLOC
747 ITMP8 = int(LOCAL_M,8)*int(LOCAL_N,8)
748 LBUFRX = min(int(root%MBLOCK,8)*int(root%NBLOCK,8),
749 & int(root%TOT_ROOT_SIZE,8)*int(root%TOT_ROOT_SIZE,8) )
750 IS_BUFRX_ALLOCATED = .FALSE.
751.GT.
IF ( LRLU LBUFRX ) THEN
752 BUFRX => A(POSFAC:POSFAC+LRLU-1_8)
755 ALLOCATE( BUFRX( LBUFRX ), stat = IERR )
758 CALL MUMPS_SET_IERROR(LBUFRX, INFO(2) )
760 & write(LP,*) ' error allocating, real array ',
761 &
'of size before CMUMPS_FACTO_ROOT', lbufrx
764 is_bufrx_allocated = .true.
767 & mpa, myid_nodes, master_root,
770 & a, la, ptrast, ptlust, ptrfac, step,
771 & info(1), keep(50), keep(19),
772 & bufrx(1), lbufrx, keep,keep8, dkeep,
773 & opeli, det_exp, det_mant, det_sign )
774 IF (is_bufrx_allocated)
DEALLOCATE ( bufrx )
776 is_bufrx_allocated = .false.
778 & mumps_procnode(procnode_steps(step(keep(38))),
781 IF ( info(1) .EQ. -10 .OR. info(1) .EQ. -40 )
THEN
782 ntotpv = ntotpv + info(2)
784 ntotpv = ntotpv + root%TOT_ROOT_SIZE
785 nmaxnpiv = max(nmaxnpiv,root%TOT_ROOT_SIZE)
788 IF (root%yes.AND.keep(60).EQ.0)
THEN
789 IF (keep(252).EQ.0)
THEN
790 IF (keep(201).EQ.1)
THEN
794 nextpiv2bewritten = 1
795 monbloc%INODE = keep(38)
796 monbloc%MASTER = .true.
798 monbloc%NROW = local_m
799 monbloc%NCOL = local_n
800 monbloc%NFS = monbloc%NCOL
801 monbloc%Last = .true.
802 monbloc%LastPiv = monbloc%NCOL
803 monbloc%LastPanelWritten_L=-9999
804 monbloc%LastPanelWritten_U=-9999
805 NULLIFY(monbloc%INDICES)
806 strat = strat_write_max
807 monbloc%Last = .true.
811 & a(ptrfac(step(keep(38)))),
813 & nextpiv2bewritten, idummy,
814 & iw(ioldps), liwfac,
815 & myid, keep8(31), ierr,last_call)
816 ELSE IF (keep(201).EQ.2)
THEN
817 keep8(31)=keep8(31)+ itmp8
819 & keep,keep8,a,la, itmp8, ierr)
822 &
': Internal error in CMUMPS_NEW_FACTOR'
827 IF (keep(201).NE.0 .OR. keep(252).NE.0)
THEN
828 lrlus = lrlus + itmp8
829 keep8(69) = keep8(69) - itmp8
830 IF (keep(252).NE.0)
THEN
842 IF (ptrfac(step(keep(38))).EQ.posfac-itmp8)
THEN
843 posfac = posfac - itmp8
854 IF (root%yes. and. keep(252) .NE. 0 .AND.
855 & (keep(60).EQ.0 .OR. keep(221).EQ.1))
THEN
856 IF (myid_nodes .EQ. master_root)
THEN
857 lrhs_cntr_master_root = root%TOT_ROOT_SIZE*keep(253)
859 lrhs_cntr_master_root = 1
861 ALLOCATE(root%RHS_CNTR_MASTER_ROOT(
862 & lrhs_cntr_master_root), stat=ierr )
865 info(2) = lrhs_cntr_master_root
867 &
write(lp,*)
' Error allocating, real array ',
868 &
'of size before CMUMPS_FACTO_ROOT',
869 & lrhs_cntr_master_root
872 fwd_local_n_rhs = numroc(keep(253), root%NBLOCK,
873 & root%MYCOL, 0, root%NPCOL)
874 fwd_local_n_rhs = max(1,fwd_local_n_rhs)
876 & root%TOT_ROOT_SIZE, keep(253),
877 & root%RHS_CNTR_MASTER_ROOT(1), local_m,
878 & fwd_local_n_rhs, root%MBLOCK, root%NBLOCK,
879 & root%RHS_ROOT(1,1), master_root,
884 IF (keep(19).NE.0)
THEN
886 & mpi_integer, mpi_sum,
891 iposroot = ptlust(step(keep(20)))
892 nfront = iw(iposroot+keep(ixsz)+3)
893 nfront8 = int(nfront,8)
894 iposrootrowindices=iposroot+6+keep(ixsz)+
895 & iw(iposroot+5+keep(ixsz))
896 ntotpv = ntotpv + nfront
897 nmaxnpiv = max(nmaxnpiv,nfront)
899 IF (root_owner.AND.keep(60).NE.0)
THEN
900 itmp8 = nfront8*nfront8
901 IF ( ptrfac(step(keep(20))) .EQ. posfac -
903 posfac = posfac - itmp8
904 lrlus = lrlus + itmp8
906 keep8(69) = keep8(69) - itmp8
908 & la-lrlus,0_8,-itmp8,keep,keep8,lrlus)
912 IF (info(1).LT.0)
GOTO 500
916 IF ( keep(38) .NE. 0 )
THEN
918 & mumps_procnode(procnode_steps(step(keep(38))),keep(199))
920 maxfrt = max( maxfrt, root%TOT_ROOT_SIZE)