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, DMUMPS_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 (DMUMPS_ROOT_STRUC) :: root
48 INTEGER N, LIW, LPTRAR, NSTEPSDONE, INFO(80)
49 DOUBLE 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 DOUBLE PRECISION,
INTENT(INOUT) :: DET_MANT
56 DOUBLE PRECISION,
TARGET :: A(LA)
57 INTEGER SLAVEF, COMM_NODES, 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 DOUBLE PRECISION :: 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 (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
83 INTEGER COMM_LOAD, ASS_IRECV
84 DOUBLE PRECISION UU, SEUIL, SEUIL_LDLT_NIV2
86 INTEGER FRTPTR( N+1 ), FRTELT( NELT )
87 INTEGER LBUFR, LBUFR_BYTES
89 DOUBLE PRECISION DBLARR( KEEP8(26) )
90 INTEGER INTARR( KEEP8(27) )
91 LOGICAL IS_ISOLATED_NODE
93 INTEGER PIVNUL_LIST(LPN_LIST)
94 DOUBLE PRECISION DKEEP(230)
96 INTEGER,
INTENT( IN ) :: LTPS_ARR
97 TYPE (MUMPS_TPS_T),
TARGET :: MUMPS_TPS_ARR( LTPS_ARR )
98 TYPE (DMUMPS_TPS_T),
TARGET :: DMUMPS_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 DOUBLE PRECISION,
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 DMUMPS_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
148 DOUBLE PRECISION :: DUMMY_FLOP_ESTIM_ACC
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, keep8, dkeep,
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,
236 & comp, info(1), info(2), comm_nodes, perm,
237 & ipool, lpool, leaf, nbfin, myid_nodes, slavef,
238 & root, opass, opeli, itloc, rhs_mumps, fils, dad,
240 & intarr, dblarr, icntl, keep,keep8
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. dmumps_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
306 & comm_nodes, racine, slavef, keep )
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 .eq. keep(20) .OR. fpere .eq. keep(38))
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,
382 & info(1), info(2), comm_nodes,
384 & ipool, lpool, leaf,
385 & nbfin, myid_nodes, slavef,
387 & opass, opeli, itloc, rhs_mumps,
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,
418 & comm_nodes, myid_nodes,
420 & perm, istep_to_iniv2, tab_pos_in_pere
422 & , mumps_tps_arr, dmumps_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,
436 & icntl, keep,keep8,dkeep, intarr,keep8(27),
438 & nstk_steps,procnode_steps, slavef,
439 & comm_nodes, myid_nodes,
440 & bufr, lbufr, lbufr_bytes, nbfin, ipool, lpool, leaf,
442 & istep_to_iniv2, tab_pos_in_pere, jobass,etatass
444 & , mumps_tps_arr, dmumps_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),
470 & procnode_steps, slavef, comm_nodes,
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(2
489 & procnode_steps, slavef, comm_nodes,
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 DMUMPS_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 .eq. keep(38))
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, lrlus, keep8(67),
574 & icntl, keep,keep8,dkeep,intarr,keep8(27),dblarr,keep8(26),
575 & nstk_steps, procnode_steps, slavef,
576 & comm_nodes, myid_nodes,
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
602#if defined(multicore_profiling)
606 & n,inode,
TYPE,typef,la,iw,liw,a,
607 & info(1),INFO(2),OPELI,NELVA,NMAXNPIV,
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 DMUMPS_FAC_PAR: ',
636 &
' INODE == KEEP(38)'
639 IF ( fpere.EQ.0 )
THEN
640 nbroot_traitees = nbroot_traitees + 1
641 IF ( nbroot_traitees .EQ. nbroot )
THEN
642 IF (keep(201).EQ.1)
THEN
644 ELSE IF ( keep(201).EQ.2)
THEN
647 nbfin = nbfin - nbroot
648 IF ( nbfin .LT. 0 )
THEN
649 WRITE(*,*)
' ERROR 1 in DMUMPS_FAC_PAR: ',
653 IF ( nbroot .LT. 0 )
THEN
654 WRITE(*,*)
' ERROR 1 in DMUMPS_FAC_PAR: ',
658 IF (slavef.GT.1)
THEN
661 & myid_nodes, comm_nodes, racine, slavef, keep )
667 ELSEIF ( fpere.NE.keep(38) .AND.
668 & mumps_procnode(procnode_steps(step(fpere)),
669 & keep(199)) .EQ. myid_nodes )
THEN
670 nstk_steps(step(fpere)) = nstk_steps(step(fpere))-1
671 IF ( nstk_steps( step( fpere )).EQ.0)
THEN
672 IF (keep(234).NE.0 .AND.
673 & mumps_inssarbr(procnode_steps(step(inode)),keep(199)))
675 stack_right_authorized = .false.
678 & procnode_steps, slavef, keep(199), keep(28), keep(76),
679 & keep(80), keep(47), step, fpere )
680 IF (keep(47) .GE. 3)
THEN
683 & procnode_steps, keep,keep8, slavef, comm_load,
684 & myid_nodes, step, n, nd, fils )
687 & nd, fils, frere, step, pimaster, keep(28),
688 & keep(50), keep(253), flop1,
689 & iw, liw, keep(ixsz) )
690 IF (fpere.NE.keep(20))
700 & ass_irecv, bufr, lbufr,
707 & comm_nodes, comm_load, slavef,
711 IF (info(1) .LT. 0)
THEN
713 & iw, liw, iwposcb, iwpos,
714 & step, ptrast, pamaster, procnode_steps, dad,
716 IF (keep(400) .GT. 0)
THEN
718 DO ith = 1, keep(400)
719 IF (
associated(mumps_tps_arr(ith)%IW))
THEN
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 IF ( info(1) .GE. 0 )
THEN
732 IF( keep(38) .NE. 0 .OR. keep(20).NE.0)
THEN
733 master_root = mumps_procnode(
734 & procnode_steps(step(max(keep(38),keep(20)))),
736 root_owner = (master_root .EQ. myid_nodes)
737 IF ( keep(38) .NE. 0 )
THEN
738 IF (keep(60).EQ.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 IF ( lrlu .GT. lbufrx )
THEN
752 bufrx => a(posfac:posfac+lrlu-1_8)
755 ALLOCATE( bufrx( lbufrx ), stat = ierr )
760 &
write(lp,*)
' Error allocating, real array ',
761 &
'of size before DMUMPS_FACTO_ROOT', lbufrx
764 is_bufrx_allocated = .true.
767 & mpa, myid_nodes, master_root,
769 & comm_nodes, iw, liw, iwpos + 1,
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
792 liwfac = iw(ioldps+xxi)
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 DMUMPS_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 DMUMPS_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,
880 & root%NPROW, root%NPCOL, comm_nodes )
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)