15 & IWCB, LIWW, NRHS, NA, LNA, NE_STEPS, W2, MTYPE, ICNTL, FROM_PP,
16 & STEP, FRERE, DAD, FILS, PTRIST, PTRFAC, IW1, LIW1, PTRACB,
17 & LIWK_PTRACB, PROCNODE_STEPS, SLAVEF, INFO, KEEP,KEEP8, DKEEP,
18 & COMM_NODES, MYID, MYID_NODES, BUFR, LBUFR, LBUFR_BYTES,
19 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, IBEG_ROOT_DEF, IEND_ROOT_DEF,
20 & IROOT_DEF_RHS_COL1, RHS_ROOT, LRHS_ROOT, SIZE_ROOT, MASTER_ROOT,
21 & RHSCOMP, LRHSCOMP, POSINRHSCOMP_FWD, POSINRHSCOMP_BWD,
22 & NZ_RHS, NBCOL_INBLOC, NRHS_ORIG, JBEG_RHS, Step2node, LStep2node,
23 & IRHS_SPARSE, IRHS_PTR, SIZE_PERM_RHS, PERM_RHS,
24 & SIZE_UNS_PERM_INV, UNS_PERM_INV, NB_FS_IN_RHSCOMP_F,
25 & NB_FS_IN_RHSCOMP_TOT, DO_NBSPARSE , RHS_BOUNDS, LRHS_BOUNDS
26 & ,IPOOL_B_L0_OMP, LPOOL_B_L0_OMP, IPOOL_A_L0_OMP, LPOOL_A_L0_OMP,
27 & L_VIRT_L0_OMP, VIRT_L0_OMP, L_PHYS_L0_OMP, PHYS_L0_OMP,
28 & PERM_L0_OMP, PTR_LEAFS_L0_OMP, L0_OMP_MAPPING, LL0_OMP_MAPPING,
29 & L0_OMP_FACTORS, LL0_OMP_FACTORS
41 TYPE ( DMUMPS_ROOT_STRUC ) :: root
44 INTEGER :: N,LIW,MTYPE,LIW1,LIWW,LNA
45 INTEGER ICNTL(60),INFO(80), KEEP(500)
46 DOUBLE PRECISION,
intent(inout) :: DKEEP(230)
48 INTEGER IW(LIW),IW1(LIW1),NA(LNA),NE_STEPS(KEEP(28)),IWCB(LIWW)
49 INTEGER STEP(N), FRERE(KEEP(28)), FILS(N), PTRIST(KEEP(28)),
51 INTEGER(8) :: PTRFAC(KEEP(28))
52 INTEGER :: LIWK_PTRACB
53 INTEGER(8) :: PTRACB(LIWK_PTRACB)
54 INTEGER NRHS, LRHSCOMP, NB_FS_IN_RHSCOMP_F, NB_FS_IN_RHSCOMP_TOT
55 DOUBLE PRECISION A(LA), W(LWC),
57 DOUBLE PRECISION :: RHSCOMP(LRHSCOMP,NRHS)
58 INTEGER SLAVEF, COMM_NODES, MYID, MYID_NODES
59 INTEGER PROCNODE_STEPS(KEEP(28)), POSINRHSCOMP_FWD(N),
61 INTEGER LBUFR, LBUFR_BYTES
63 INTEGER ISTEP_TO_INIV2(KEEP(71)),
64 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
65 INTEGER IBEG_ROOT_DEF, IEND_ROOT_DEF, IROOT_DEF_RHS_COL1
66 INTEGER SIZE_ROOT, MASTER_ROOT
67 INTEGER(8) :: LRHS_ROOT
68 DOUBLE PRECISION RHS_ROOT(LRHS_ROOT)
69 LOGICAL,
intent(in) :: FROM_PP
70 INTEGER,
intent(in) :: NZ_RHS, NBCOL_INBLOC, NRHS_ORIG
71 INTEGER,
intent(in) :: SIZE_UNS_PERM_INV
72 INTEGER,
intent(in) :: SIZE_PERM_RHS
73 INTEGER,
intent(in) :: JBEG_RHS
74 INTEGER,
intent(in) :: IRHS_SPARSE(NZ_RHS)
75 INTEGER,
intent(in) :: IRHS_PTR(NBCOL_INBLOC+1)
76 INTEGER,
intent(in) :: PERM_RHS(SIZE_PERM_RHS)
77 INTEGER,
intent(in) :: UNS_PERM_INV(SIZE_UNS_PERM_INV)
78 INTEGER,
intent(in) :: LStep2node
79 INTEGER,
intent(in) :: Step2node(LStep2node)
80 LOGICAL,
intent(in) :: DO_NBSPARSE
81 INTEGER,
intent(in) :: LRHS_BOUNDS
82 INTEGER,
intent(inout) :: RHS_BOUNDS (LRHS_BOUNDS)
83 INTEGER,
INTENT (IN) :: LPOOL_B_L0_OMP
84 INTEGER,
INTENT (IN) :: IPOOL_B_L0_OMP( LPOOL_B_L0_OMP )
85 INTEGER,
INTENT (IN) :: LPOOL_A_L0_OMP
86 INTEGER,
INTENT (IN) :: IPOOL_A_L0_OMP( LPOOL_A_L0_OMP )
87 INTEGER,
INTENT (IN) :: L_PHYS_L0_OMP
88 INTEGER,
INTENT (INOUT) :: PHYS_L0_OMP( L_PHYS_L0_OMP )
89 INTEGER,
INTENT (IN) :: L_VIRT_L0_OMP
90 INTEGER,
INTENT (IN) :: VIRT_L0_OMP( L_VIRT_L0_OMP )
91 INTEGER,
INTENT (IN) :: PERM_L0_OMP( )
92 INTEGER,
INTENT (IN) :: PTR_LEAFS_L0_OMP( L_PHYS_L0_OMP + 1)
93 INTEGER,
INTENT (IN) :: LL0_OMP_MAPPING
94 INTEGER,
INTENT (IN) :: L0_OMP_MAPPING( LL0_OMP_MAPPING )
95 INTEGER,
INTENT (IN) :: LL0_OMP_FACTORS
96 TYPE (DMUMPS_L0OMPFAC_T),
INTENT(IN) ::
97 & l0_omp_factors(ll0_omp_factors)
101 INTEGER LPOOL,MYLEAF,MYROOT,NBROOT,LPANEL_POS
102 INTEGER MYLEAF_NOT_PRUNED
103 INTEGER NSTK_S,IPOOL,IPANEL_POS,PTRICB
105 INTEGER MODE_RHS_BOUNDS
112 INTEGER soln_c_class, forw_soln, back_soln, root_soln
114 LOGICAL DOFORWARD, , DOBACKWARD
115 LOGICAL :: DO_L0OMP_FWD, DO_L0OMP_BWD
116 LOGICAL I_WORKED_ON_ROOT, SPECIAL_ROOT_REACHED
118 LOGICAL DOROOT_FWD_OOC, DOROOT_BWD_PANEL
119 LOGICAL SWITCH_OFF_ES
122 INTEGER :: NBROOT_UNDER_L0
123 DOUBLE PRECISION,
PARAMETER :: ZERO = 0.0d0
124 include
'mumps_headers.h'
125 INTEGER,
DIMENSION(:),
ALLOCATABLE :: nodes_RHS
127 INTEGER nb_prun_leaves
128 INTEGER,
DIMENSION(:),
ALLOCATABLE :: Pruned_Leaves
129 INTEGER,
DIMENSION(:),
ALLOCATABLE :
131 INTEGER nb_prun_roots, JAM1
132 INTEGER,
DIMENSION(:),
ALLOCATABLE :: Pruned_SONS, Pruned_Roots
133 INTEGER :: SIZE_TO_PROCESS
134 LOGICAL,
DIMENSION(:),
ALLOCATABLE ::
135 INTEGER ISTEP, INODE_PRINC
136 INTEGER :: INODE, ICHILD
138 LOGICAL Exploit_Sparsity
139 LOGICAL DO_NBSPARSE_BWD, PRUN_BELOW_BWD
140 INTEGER :: OOC_FCT_TYPE_TMP
141 INTEGER :: MUMPS_OOC_GET_FCT_TYPE
142 EXTERNAL :: mumps_ooc_get_fct_type
143 DOUBLE PRECISION TIME_FWD,TIME_BWD,TIME_SpecialRoot
145 INTEGER,
EXTERNAL :: MUMPS_PROCNODE
146 LOGICAL,
EXTERNAL :: MUMPS_IN_OR_ROOT_SSARBR
152 CALL vtclassdef(
'Soln_c',soln_c_class,ierr)
153 CALL vtfuncdef(
'forw_soln',soln_c_class,forw_soln,ierr)
154 CALL vtfuncdef(
'back_soln',soln_c_class,back_soln,ierr)
155 CALL vtfuncdef(
'root_soln',soln_c_class,root_soln,ierr)
157 IF (.NOT. from_pp)
THEN
161 ptricb = nstk_s + keep(28)
162 ipool = ptricb + keep(28)
164 ipanel_pos = ipool + lpool
165 IF (keep(201).EQ.1)
THEN
166 lpanel_pos = keep(228)+1
170 IF (ipanel_pos + lpanel_pos -1 .ne. liw1 )
THEN
172 & IPANEL_POS, LPANEL_POS, LIW1
177 SPECIAL_ROOT_REACHED = .TRUE.
178 SWITCH_OFF_ES = .FALSE.
179.NE..OR..NE.
IF ( KEEP(111)0 KEEP(252)0 ) THEN
182.eq.
IF (KEEP(221)1) DOBACKWARD = .FALSE.
183.eq.
IF (KEEP(221)2) DOFORWARD = .FALSE.
184.EQ..AND.
IF ( KEEP(60)0
186.NE..AND.
& (KEEP(38)0 root%yes)
188.NE..AND..EQ.
& (KEEP(20)0 MYID_NODESMASTER_ROOT)
190.AND..EQ.
& KEEP(252)0
197.AND..NE..AND..EQ.
DOROOT_BWD_PANEL = DOROOT MTYPE1 KEEP(50)0
198.AND..EQ.
& KEEP(201)1
199.AND..NOT.
DOROOT_FWD_OOC = DOROOT DOROOT_BWD_PANEL
200.NE.
AM1 = (KEEP(237) 0)
201.NE..AND..NOT.
Exploit_Sparsity = (KEEP(235) 0) ( AM1)
202.OR.
DO_PRUN = (Exploit_SparsityAM1)
204 Exploit_Sparsity = .FALSE.
211.GT..AND..GT.
DO_L0OMP_FWD= ( (KEEP(401)0)(KEEP(400)0)
213.AND..EQ.
DO_L0OMP_FWD = DO_L0OMP_FWD KEEP(201)0
214.GT..AND..GT.
DO_L0OMP_BWD = ( (KEEP(401)0)(KEEP(400)0)
216.AND..EQ.
DO_L0OMP_BWD = DO_L0OMP_BWD KEEP(201)0
218 ALLOCATE (Pruned_SONS(KEEP(28)), stat=I)
223 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
224.LT.
IF(INFO(1)0) GOTO 500
229 SIZE_TO_PROCESS = KEEP(28)
233 ALLOCATE (TO_PROCESS(SIZE_TO_PROCESS), stat=I)
238 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
239.LT.
IF(INFO(1)0) GOTO 500
240.AND.
IF ( DOFORWARD DO_PRUN ) THEN
244 IF ( Exploit_Sparsity ) THEN
247 ISTEP = abs( STEP(IRHS_SPARSE(I)) )
248 INODE_PRINC = Step2node( ISTEP )
249.eq.
IF ( Pruned_SONS(ISTEP) -1) THEN
250 nb_nodes_RHS = nb_nodes_RHS +1
251 Pruned_SONS(ISTEP) = 0
254 ALLOCATE(nodes_RHS(nb_nodes_RHS), STAT = allocok)
255.GT.
IF(allocok0) THEN
259 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
260.LT.
IF(INFO(1)0) GOTO 500
264 ISTEP = abs( STEP(IRHS_SPARSE(I)) )
265 INODE_PRINC = Step2node( ISTEP )
266.eq.
IF ( Pruned_SONS(ISTEP) -1) THEN
267 nb_nodes_RHS = nb_nodes_RHS +1
268 nodes_RHS(nb_nodes_RHS) = INODE_PRINC
269 Pruned_SONS(ISTEP) = 0
274 DO I = 1, NBCOL_INBLOC
275.EQ.
IF ( (IRHS_PTR(I+1)-IRHS_PTR(I))0) CYCLE
276.NE..OR..NE.
IF ( (KEEP(242) 0 ) (KEEP(243)0) ) THEN
277 JAM1 = PERM_RHS(JBEG_RHS+I-1)
281 ISTEP = abs(STEP(JAM1))
282 INODE_PRINC = Step2node(ISTEP)
283.eq.
IF ( Pruned_SONS(ISTEP) -1) THEN
284 nb_nodes_RHS = nb_nodes_RHS +1
285 Pruned_SONS(ISTEP) = 0
288 ALLOCATE(nodes_RHS(nb_nodes_RHS), STAT = allocok)
289.GT.
IF(allocok0) THEN
293 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
294.LT.
IF(INFO(1)0) GOTO 500
297 DO I = 1, NBCOL_INBLOC
298.EQ.
IF ( (IRHS_PTR(I+1)-IRHS_PTR(I))0) CYCLE
299.NE..OR..NE.
IF ( (KEEP(242) 0 ) (KEEP(243)0) ) THEN
300 JAM1 = PERM_RHS(JBEG_RHS+I-1)
304 ISTEP = abs(STEP(JAM1))
305 INODE_PRINC = Step2node(ISTEP)
306.eq.
IF ( Pruned_SONS(ISTEP) -1) THEN
307 nb_nodes_RHS = nb_nodes_RHS +1
308 nodes_RHS(nb_nodes_RHS) = INODE_PRINC
309 Pruned_SONS(ISTEP) = 0
313 CALL DMUMPS_CHAIN_PRUN_NODES(
317 & nodes_RHS, nb_nodes_RHS,
318 & Pruned_SONS, TO_PROCESS,
319 & nb_prun_nodes, nb_prun_roots,
321 ALLOCATE(Pruned_List(nb_prun_nodes), STAT=allocok)
322.GT.
IF(allocok0) THEN
324 INFO(2)=nb_prun_nodes
326 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
327.LT.
IF(INFO(1)0) GOTO 500
328 ALLOCATE(Pruned_Roots(nb_prun_roots), STAT=allocok)
329.GT.
IF(allocok0) THEN
331 INFO(2)=nb_prun_roots
333 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
334.LT.
IF(INFO(1)0) GOTO 500
335 ALLOCATE(Pruned_Leaves(nb_prun_leaves), STAT=allocok)
336.GT.
IF(allocok0) THEN
338 INFO(2)=nb_prun_leaves
340 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
341.LT.
IF(INFO(1)0) GOTO 500
342 CALL DMUMPS_CHAIN_PRUN_NODES(
346 & nodes_RHS, nb_nodes_RHS,
347 & Pruned_SONS, TO_PROCESS,
348 & nb_prun_nodes, nb_prun_roots, nb_prun_leaves,
349 & Pruned_List, Pruned_Roots, Pruned_Leaves )
350 IF(allocated(nodes_RHS)) DEALLOCATE(nodes_RHS)
351 CALL DMUMPS_OOC_SET_STATES_ES(N,
352 & KEEP(201), Pruned_List, nb_prun_nodes,
354.GT.
IF ( KEEP(201) 0) THEN
355 OOC_FCT_TYPE_TMP=MUMPS_OOC_GET_FCT_TYPE
356 & ('F',MTYPE,KEEP(201),KEEP(50))
358 OOC_FCT_TYPE_TMP = -5959
360 CALL DMUMPS_CHAIN_PRUN_NODES_STATS(
361 & MYID_NODES, N, KEEP(28), KEEP(201), KEEP(485),
362 & KEEP8(31)+KEEP8(64),
363 & STEP, Pruned_List, nb_prun_nodes, OOC_FCT_TYPE_TMP
365 IF (DO_NBSPARSE) THEN
366 nb_sparse = max(1,KEEP(497))
368 IF (Exploit_Sparsity) MODE_RHS_BOUNDS = 2
369 CALL DMUMPS_INITIALIZE_RHS_BOUNDS(
371 & IRHS_PTR, NBCOL_INBLOC, IRHS_SPARSE, NZ_RHS,
372 & JBEG_RHS, PERM_RHS, SIZE_PERM_RHS, KEEP(242), KEEP(243),
373 & UNS_PERM_INV, SIZE_UNS_PERM_INV, KEEP(23),
374 & RHS_BOUNDS, KEEP(28),
375 & nb_sparse, MYID_NODES,
377 CALL DMUMPS_PROPAGATE_RHS_BOUNDS(
378 & Pruned_Leaves, nb_prun_leaves,
379 & STEP, N, Pruned_SONS,
380 & DAD, RHS_BOUNDS, KEEP(28),
381 & MYID_NODES, COMM_NODES, KEEP(485),
382 & IW, LIW, PTRIST,KEEP(IXSZ),OOC_FCT_TYPE_TMP,0,
383 & KEEP(50), KEEP(38))
385 SPECIAL_ROOT_REACHED = .FALSE.
386 DO I= 1, nb_prun_roots
387.EQ..OR.
IF ( (Pruned_Roots(I)KEEP(38))
388.EQ.
& (Pruned_Roots(I)KEEP(20)) ) THEN
389 SPECIAL_ROOT_REACHED = .TRUE.
393 DEALLOCATE(Pruned_List)
395.GT.
IF (KEEP(201)0) THEN
396.OR.
IF (DOFORWARD DOROOT_FWD_OOC) THEN
397 CALL DMUMPS_SOLVE_INIT_OOC_FWD(PTRFAC,KEEP(28),MTYPE,
398 & A,LA,DOFORWARD,IERR)
407.eq.
IF ( KEEP( 50 ) 0 ) THEN
413 CALL VTBEGIN(forw_soln,ierr)
415.NOT.
IF ( DO_PRUN ) THEN
416 CALL MUMPS_INIT_NROOT_DIST(N, NBROOT, MYROOT, MYID_NODES,
417 & SLAVEF, NA, LNA, KEEP, STEP, PROCNODE_STEPS)
418 DO ISTEP =1, KEEP(28)
419 IW1(NSTK_S+ISTEP-1) = NE_STEPS(ISTEP)
422 CALL MUMPS_NBLOCAL_ROOTS_OR_LEAVES( N,
423 & nb_prun_roots, Pruned_Roots,
424 & MYROOT, MYID_NODES, SLAVEF, KEEP, STEP,
427 DEALLOCATE(Pruned_Roots)
429.AND..EQ.
IF ((Exploit_Sparsity)(nb_prun_rootsNA(2))) THEN
430 DEALLOCATE(Pruned_Roots)
431 SWITCH_OFF_ES = .TRUE.
433 DO ISTEP = 1, KEEP(28)
434 IW1(NSTK_S+ISTEP-1) = Pruned_SONS(ISTEP)
437 IF ( DO_L0OMP_FWD ) THEN
438 CALL DMUMPS_SOL_L0OMP_R( N, MTYPE_LOC, NRHS, LIW, IW,
439 & IW1(PTRICB), RHSCOMP, LRHSCOMP, POSINRHSCOMP_FWD,
440 & STEP, FRERE, DAD, FILS, IW1(NSTK_S),
441 & PTRIST, PTRFAC, INFO,
442 & KEEP, KEEP8, DKEEP, PROCNODE_STEPS, SLAVEF,
443 & COMM_NODES, MYID_NODES,
444 & BUFR, LBUFR, LBUFR_BYTES,
445 & RHS_ROOT, LRHS_ROOT,
446 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
447 & RHS_BOUNDS, LRHS_BOUNDS, DO_NBSPARSE,
450 & LPOOL_B_L0_OMP, IPOOL_B_L0_OMP,
451 & L_VIRT_L0_OMP, VIRT_L0_OMP,
452 & L_PHYS_L0_OMP, PHYS_L0_OMP,
453 & PERM_L0_OMP, PTR_LEAFS_L0_OMP,
454 & L0_OMP_MAPPING, LL0_OMP_MAPPING,
455 & L0_OMP_FACTORS, LL0_OMP_FACTORS,
456 & DO_PRUN, TO_PROCESS
458 MYROOT = MYROOT - NBROOT_UNDER_L0
460 MYLEAF_NOT_PRUNED = IPOOL_A_L0_OMP(LPOOL_A_L0_OMP)
461 DO I=1, MYLEAF_NOT_PRUNED
462 IF ( TO_PROCESS( STEP( IPOOL_A_L0_OMP(I) ))) THEN
463 IW1(IPOOL+MYLEAF-1) = IPOOL_A_L0_OMP(I)
464 IW1(NSTK_S+STEP(IPOOL_A_L0_OMP(I))-1) = -99
467 DO I = 1, nb_prun_leaves
468 INODE = Pruned_Leaves(I)
469 IF ( MUMPS_PROCNODE(PROCNODE_STEPS(STEP(INODE)),KEEP(199))
470.EQ.
& MYID_NODES ) THEN
471.EQ.
IF (L0_OMP_MAPPING( STEP(INODE) ) 0) THEN
472 IW1(NSTK_S+STEP(INODE)-1) = -99
476 DO I = 1, L_PHYS_L0_OMP
477 INODE = DAD(STEP(PHYS_L0_OMP(I)))
478.NE.
IF (INODE 0) THEN
479 IF ( TO_PROCESS( STEP( INODE ))) THEN
480.EQ.
IF ( IW1(NSTK_S+STEP(INODE)-1) 0 ) THEN
481 IW1(NSTK_S+STEP(INODE)-1) = -99
487 DO ISTEP = KEEP(28), 1, -1
488 INODE=Step2Node(ISTEP)
489.EQ.
IF (IW1(NSTK_S+STEP(INODE)-1)-99) THEN
491 IW1(IPOOL+MYLEAF-1) = INODE
492 IW1(NSTK_S+STEP(INODE)-1) = 0
495 DEALLOCATE(Pruned_Leaves)
497 MYLEAF = IPOOL_A_L0_OMP(LPOOL_A_L0_OMP)
499 IW1(IPOOL+I-1) = IPOOL_A_L0_OMP(I)
504 CALL MUMPS_INIT_POOL_DIST_NONA( N, MYLEAF, MYID_NODES,
505 & nb_prun_leaves, Pruned_Leaves, KEEP, KEEP8,
506 & STEP, PROCNODE_STEPS, IW1(IPOOL), LPOOL )
508 DEALLOCATE(Pruned_Leaves)
510 CALL MUMPS_INIT_POOL_DIST( N, MYLEAF, MYID_NODES,
511 & SLAVEF, NA, LNA, KEEP, KEEP8, STEP,
512 & PROCNODE_STEPS, IW1(IPOOL), LPOOL )
516 CALL DMUMPS_SOL_R(N, A(1), LA, IW(1), LIW, W(1),
518 & IW1(PTRICB), IWCB, LIWW,
519 & RHSCOMP,LRHSCOMP,POSINRHSCOMP_FWD,
520 & STEP, FRERE,DAD,FILS,
521 & IW1(NSTK_S),IW1(IPOOL),LPOOL,PTRIST,PTRFAC,
522 & MYLEAF, MYROOT, INFO,
523 & KEEP, KEEP8, DKEEP,
524 & PROCNODE_STEPS, SLAVEF, COMM_NODES, MYID_NODES,
525 & BUFR, LBUFR, LBUFR_BYTES,
526 & RHS_ROOT, LRHS_ROOT, MTYPE_LOC,
528 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
529 & , RHS_BOUNDS, LRHS_BOUNDS, DO_NBSPARSE, FROM_PP
530 & , L0_OMP_MAPPING, LL0_OMP_MAPPING,
531 & L0_OMP_FACTORS, LL0_OMP_FACTORS
537 CALL VTEND(forw_soln,ierr)
540 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
541.LT.
IF ( INFO(1) 0 ) THEN
544 & ': ** ERROR RETURN FROM DMUMPS_SOL_R,INFO(1:2)=',
549 CALL MPI_BARRIER( COMM_NODES, IERR )
550.NOT.
IF (FROM_PP) THEN
551 CALL MUMPS_SECFIN(TIME_FWD)
552 DKEEP(117)=TIME_FWD + DKEEP(117)
554.AND.
IF (DO_PRUNSWITCH_OFF_ES) THEN
556 Exploit_Sparsity = .FALSE.
557.NOT.
IF ( DO_L0OMP_BWD ) THEN
558.AND..NE.
IF ( allocated(TO_PROCESS) SIZE_TO_PROCESS1 ) THEN
559 DEALLOCATE (TO_PROCESS)
561 ALLOCATE(TO_PROCESS(SIZE_TO_PROCESS),stat=I)
565.AND.
IF ( DOBACKWARD DO_PRUN ) THEN
567.AND..EQ.
IF ( Exploit_Sparsity (KEEP(111)0) ) THEN
568 nb_nodes_RHS = nb_prun_roots
569 ALLOCATE(nodes_RHS(nb_nodes_RHS), STAT = allocok)
570.GT.
IF(allocok0) THEN
571 WRITE(*,*)'Problem with allocation of nodes_RHS'
573 INFO(2) = nb_nodes_RHS
576 nodes_RHS(1:nb_prun_roots)=Pruned_Roots(1:nb_prun_roots)
577 DEALLOCATE(Pruned_Roots)
583.NE.
IF (KEEP(23)0) I = UNS_PERM_INV(I)
585.eq.
IF ( Pruned_SONS(ISTEP) -1) THEN
586 nb_nodes_RHS = nb_nodes_RHS +1
587 Pruned_SONS(ISTEP) = 0
590 ALLOCATE(nodes_RHS(nb_nodes_RHS), STAT = allocok)
591.GT.
IF(allocok0) THEN
592 WRITE(*,*)'Problem with allocation of nodes_RHS'
594 INFO(2) = nb_nodes_RHS
601.NE.
IF (KEEP(23)0) I = UNS_PERM_INV(I)
603 INODE_PRINC = Step2node(ISTEP)
604.eq.
IF ( Pruned_SONS(ISTEP) -1) THEN
605 nb_nodes_RHS = nb_nodes_RHS +1
606 nodes_RHS(nb_nodes_RHS) = INODE_PRINC
607 Pruned_SONS(ISTEP) = 0
611 IF ( Exploit_Sparsity ) THEN
612 CALL DMUMPS_TREE_PRUN_NODES(
614 & DAD, NE_STEPS, FRERE, KEEP(28),
616 & nodes_RHS, nb_nodes_RHS,
618 & nb_prun_nodes, nb_prun_roots, nb_prun_leaves
620 ALLOCATE(Pruned_List(nb_prun_nodes), STAT=allocok)
621.GT.
IF(allocok0) THEN
623 INFO(2)=nb_prun_nodes
625 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
626.LT.
IF(INFO(1)0) GOTO 500
627 ALLOCATE(Pruned_Roots(nb_prun_roots), STAT=allocok)
628.GT.
IF(allocok0) THEN
630 INFO(2)=nb_prun_roots
632 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
633.LT.
IF(INFO(1)0) GOTO 500
634 ALLOCATE(Pruned_Leaves(nb_prun_leaves), STAT=allocok)
635.GT.
IF(allocok0) THEN
637 INFO(2)=nb_prun_leaves
639 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
640.LT.
IF(INFO(1)0) GOTO 500
641 CALL DMUMPS_TREE_PRUN_NODES(
643 & DAD, NE_STEPS, FRERE, KEEP(28),
645 & nodes_RHS, nb_nodes_RHS,
647 & nb_prun_nodes, nb_prun_roots, nb_prun_leaves,
648 & Pruned_List, Pruned_Roots, Pruned_Leaves
650 CALL DMUMPS_OOC_SET_STATES_ES(N,
651 & KEEP(201), Pruned_List, nb_prun_nodes,
653 IF(allocated(nodes_RHS)) DEALLOCATE(nodes_RHS)
654.GT.
IF (KEEP(201)0) THEN
655 OOC_FCT_TYPE_TMP=MUMPS_OOC_GET_FCT_TYPE
656 & ('B',MTYPE,KEEP(201),KEEP(50))
658 OOC_FCT_TYPE_TMP = -5959
660 CALL DMUMPS_TREE_PRUN_NODES_STATS(
661 & MYID_NODES, N, KEEP(28), KEEP(201),
662 & KEEP8(31)+KEEP8(64),
665 & nb_prun_nodes, OOC_FCT_TYPE_TMP)
668.EQ..AND.
IF(KEEP(201)1DOROOT_BWD_PANEL) THEN
669 I_WORKED_ON_ROOT = .FALSE.
670 CALL DMUMPS_SOLVE_INIT_OOC_BWD(PTRFAC,KEEP(28),MTYPE,
671 & I_WORKED_ON_ROOT, IROOT, A, LA, IERR)
677.EQ.
IF (KEEP(201)1) THEN
678 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
679.LT.
IF ( INFO(1) 0 ) GOTO 500
681.NE..AND..EQ.
IF (KEEP(60)0 KEEP(221)0
682.AND..EQ.
& MYID_NODES MASTER_ROOT) THEN
683 RHS_ROOT(1:NRHS*SIZE_ROOT) = ZERO
685.NOT.
IF ( FROM_PP) THEN
686 CALL MUMPS_SECDEB(TIME_SpecialRoot)
688.NE..AND.
IF ( ( KEEP( 38 ) 0 ) SPECIAL_ROOT_REACHED ) THEN
689.EQ..AND..EQ.
IF ( KEEP(60) 0 KEEP(252) 0 ) THEN
691.GT.
IF (KEEP(201)0) THEN
692.AND..NE..and.
IF ( (Exploit_Sparsity(KEEP(111)0))
693.eq.
& (OOC_STATE_NODE(STEP(KEEP(38)))-6) ) THEN
697 IOLDPS = PTRIST(STEP(KEEP(38)))
698 LOCAL_M = IW( IOLDPS + 2 + KEEP(IXSZ))
699 LOCAL_N = IW( IOLDPS + 1 + KEEP(IXSZ))
700.GT.
IF (KEEP(201)0) THEN
701 CALL DMUMPS_SOLVE_GET_OOC_NODE(
702 & KEEP(38),PTRFAC,KEEP,A,LA,
703 & STEP,KEEP8,N,DUMMY_BOOL,IERR)
707 WRITE(*,*) '** ERROR after DMUMPS_SOLVE_GET_OOC_NODE',
712 IAPOS = PTRFAC(IW( IOLDPS + 4 + KEEP(IXSZ)))
713.EQ.
IF (LOCAL_M * LOCAL_N 0) THEN
714 IAPOS = min(IAPOS, LA)
717 CALL VTBEGIN(root_soln,ierr)
719 CALL DMUMPS_ROOT_SOLVE( NRHS, root%DESCRIPTOR(1),
720 & root%CNTXT_BLACS, LOCAL_M, LOCAL_N,
721 & root%MBLOCK, root%NBLOCK,
722 & root%IPIV(1), root%LPIV, MASTER_ROOT, MYID_NODES,
725 & root%TOT_ROOT_SIZE, A( IAPOS ),
726 & INFO(1), MTYPE, KEEP(50), FROM_PP)
727.GT.
IF(KEEP(201)0)THEN
728 CALL DMUMPS_FREE_FACTORS_FOR_SOLVE(KEEP(38),
729 & PTRFAC,KEEP(28),A,LA,.FALSE.,IERR)
734 & '** ERROR after DMUMPS_FREE_FACTORS_FOR_SOLVE ',
741.NE..AND.
ELSE IF ( ( KEEP(20) 0) SPECIAL_ROOT_REACHED ) THEN
742.eq.
IF ( MYID_NODES MASTER_ROOT ) THEN
745.NOT.
IF (FROM_PP) THEN
746 CALL MUMPS_SECFIN(TIME_SpecialRoot)
747 DKEEP(119)=TIME_SpecialRoot + DKEEP(119)
750 CALL VTEND(root_soln,ierr)
753 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
754.LT.
IF ( INFO(1) 0 ) RETURN
756.GT..AND..NOT.
IF ( KEEP(201)0 DOROOT_BWD_PANEL )
758 I_WORKED_ON_ROOT = DOROOT
759.gt.
IF (KEEP(38)0 ) THEN
760.AND..EQ.
IF ( ( Exploit_Sparsity(KEEP(111)0) )
762.eq.
IF (OOC_STATE_NODE(STEP(KEEP(38)))-6) THEN
763 OOC_STATE_NODE(STEP(KEEP(38)))=-4
766.AND..NE.
IF (Exploit_Sparsity(KEEP(111)0)) THEN
767.eq.
IF (OOC_STATE_NODE(STEP(KEEP(38)))-6) THEN
768 I_WORKED_ON_ROOT = .FALSE.
774 DO_NBSPARSE_BWD = .FALSE.
776 DO_NBSPARSE_BWD = DO_NBSPARSE
779.OR.
PRUN_BELOW_BWD = PRUN_BELOW_BWD DO_L0OMP_BWD
781 CALL DMUMPS_CHAIN_PRUN_NODES(
785 & nodes_RHS, nb_nodes_RHS,
786 & Pruned_SONS, TO_PROCESS,
787 & nb_prun_nodes, nb_prun_roots,
789 ALLOCATE(Pruned_List(nb_prun_nodes), STAT=allocok)
790.GT.
IF(allocok0) THEN
792 INFO(2)=nb_prun_nodes
794 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
795.LT.
IF(INFO(1)0) GOTO 500
796 ALLOCATE(Pruned_Roots(nb_prun_roots), STAT=allocok)
797.GT.
IF(allocok0) THEN
799 INFO(2)=nb_prun_roots
801 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
802.LT.
IF(INFO(1)0) GOTO 500
803 ALLOCATE(Pruned_Leaves(nb_prun_leaves), STAT=allocok)
804.GT.
IF(allocok0) THEN
806 INFO(2)=nb_prun_leaves
808 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
809.LT.
IF(INFO(1)0) GOTO 500
810 CALL DMUMPS_CHAIN_PRUN_NODES(
814 & nodes_RHS, nb_nodes_RHS,
815 & Pruned_SONS, TO_PROCESS,
816 & nb_prun_nodes, nb_prun_roots, nb_prun_leaves,
817 & Pruned_List, Pruned_Roots, Pruned_Leaves )
818 CALL DMUMPS_OOC_SET_STATES_ES(N,
819 & KEEP(201), Pruned_List, nb_prun_nodes,
821.GT.
IF (KEEP(201)0) THEN
822 OOC_FCT_TYPE_TMP=MUMPS_OOC_GET_FCT_TYPE
823 & ('B',MTYPE,KEEP(201),KEEP(50))
825 OOC_FCT_TYPE_TMP = -5959
827 CALL DMUMPS_CHAIN_PRUN_NODES_STATS(
828 & MYID_NODES, N, KEEP(28), KEEP(201), KEEP(485), KEEP8(31),
829 & STEP, Pruned_List, nb_prun_nodes, OOC_FCT_TYPE_TMP
831 IF (DO_NBSPARSE_BWD) THEN
832 nb_sparse = max(1,KEEP(497))
833 CALL DMUMPS_INITIALIZE_RHS_BOUNDS(
835 & IRHS_PTR, NBCOL_INBLOC, IRHS_SPARSE, NZ_RHS,
836 & JBEG_RHS, PERM_RHS, SIZE_PERM_RHS, KEEP(242), KEEP(243),
837 & UNS_PERM_INV, SIZE_UNS_PERM_INV, KEEP(23),
838 & RHS_BOUNDS, KEEP(28),
839 & nb_sparse, MYID_NODES,
841 CALL DMUMPS_PROPAGATE_RHS_BOUNDS(
842 & Pruned_Leaves, nb_prun_leaves,
843 & STEP, N, Pruned_SONS,
844 & DAD, RHS_BOUNDS, KEEP(28),
845 & MYID_NODES, COMM_NODES, KEEP(485),
846 & IW, LIW, PTRIST,KEEP(IXSZ),OOC_FCT_TYPE_TMP,1,
847 & KEEP(50), KEEP(38))
850.GT.
IF ( KEEP(201)0 ) THEN
851 IROOT = max(KEEP(20),KEEP(38))
852 CALL DMUMPS_SOLVE_INIT_OOC_BWD(PTRFAC,KEEP(28),MTYPE,
853 & I_WORKED_ON_ROOT, IROOT, A, LA, IERR)
855.eq.
IF ( KEEP( 50 ) 0 ) THEN
861 CALL VTBEGIN(back_soln,ierr)
863.NOT.
IF (FROM_PP) THEN
864 CALL MUMPS_SECDEB(TIME_BWD)
866.NOT.
IF ( SPECIAL_ROOT_REACHED ) THEN
867 RHS_ROOT(1:NRHS*SIZE_ROOT) = ZERO
869.AND..NE.
IF (AM1(NB_FS_IN_RHSCOMP_FNB_FS_IN_RHSCOMP_TOT)) THEN
871 II = POSINRHSCOMP_BWD(I)
872.GT..AND..GT.
IF ((II0)(IINB_FS_IN_RHSCOMP_F)) THEN
874 RHSCOMP(II, K) = ZERO
879.NOT.
IF ( DO_PRUN ) THEN
880.NOT.
IF ( DO_L0OMP_BWD ) THEN
881 IF (DO_L0OMP_FWD) THEN
885 IF ( DO_L0OMP_BWD ) THEN
886 TO_PROCESS(:) = .TRUE.
887 DO I=1, L_PHYS_L0_OMP
888 TO_PROCESS( STEP(PHYS_L0_OMP( I )))
891.EQ.
IF (MYLEAF -1) THEN
892 MYLEAF = IPOOL_A_L0_OMP(LPOOL_A_L0_OMP)
894 CALL MUMPS_INIT_POOL_DIST_NA_BWD_L0( N, MYROOT, MYID_NODES,
895 & NA, LNA, KEEP, KEEP8, STEP, PROCNODE_STEPS,
896 & IW1(IPOOL), LPOOL, L0_OMP_MAPPING )
898 CALL MUMPS_INIT_POOL_DIST_NA_BWD( N, MYROOT, MYID_NODES,
899 & NA, LNA, KEEP, KEEP8, STEP, PROCNODE_STEPS,
900 & IW1(IPOOL), LPOOL )
901.EQ.
IF (MYLEAF -1) THEN
902 CALL MUMPS_NBLOCAL_ROOTS_OR_LEAVES( N,
905 & MYLEAF, MYID_NODES, SLAVEF, KEEP, STEP,
910 IF ( DO_L0OMP_BWD ) THEN
911 DO I=1, L_PHYS_L0_OMP
912 IF ( TO_PROCESS( STEP(PHYS_L0_OMP( I ))) ) THEN
913 TO_PROCESS( STEP(PHYS_L0_OMP( I ))) = .FALSE.
914 PHYS_L0_OMP( I ) = -PHYS_L0_OMP( I )
918 DO ISTEP = 1, KEEP(28)
919 IF ( MUMPS_PROCNODE(PROCNODE_STEPS(ISTEP),KEEP(199))
920.NE.
& MYID_NODES ) THEN
923.NE.
IF ( L0_OMP_MAPPING( ISTEP ) 0 ) THEN
926.NOT.
IF ( TO_PROCESS( ISTEP ) ) THEN
929 I = Step2Node( ISTEP )
931.GT.
DO WHILE ( ICHILD 0 )
932 ICHILD = FILS( ICHILD )
934.LT.
IF ( ICHILD 0 ) THEN
936.GT.
DO WHILE ( ICHILD 0 )
937.EQ..AND.
IF ( L0_OMP_MAPPING( STEP( ICHILD ) ) 0
938 & TO_PROCESS(STEP( ICHILD )) ) THEN
941 ICHILD = FRERE( STEP( ICHILD ) )
947 CALL MUMPS_INIT_POOL_DIST_NA_BWDL0ES( N, MYROOT,
949 & NA, LNA, KEEP, KEEP8, STEP, PROCNODE_STEPS,
950 & IW1(IPOOL), LPOOL, L0_OMP_MAPPING, TO_PROCESS )
952 CALL MUMPS_INIT_POOL_DIST_BWD(N, nb_prun_roots,
954 & MYROOT, MYID_NODES, KEEP, KEEP8, STEP, PROCNODE_STEPS,
956 CALL MUMPS_NBLOCAL_ROOTS_OR_LEAVES( N,
957 & nb_prun_leaves, Pruned_Leaves,
958 & MYLEAF, MYID_NODES, SLAVEF, KEEP, STEP,
968.EQ.
IF (KEEP(31) 1) THEN
970.EQ.
IF (MUMPS_PROCNODE(PROCNODE_STEPS(I),KEEP(199))
972.NOT.
IF ( MUMPS_IN_OR_ROOT_SSARBR(PROCNODE_STEPS(I),
974.EQ.
IF ( L0_OMP_MAPPING(I) 0 ) THEN
978 IF ( TO_PROCESS(I) ) THEN
979 KEEP(31) = KEEP(31) + 1
982 KEEP(31) = KEEP(31) + 1
989 CALL DMUMPS_SOL_S( N, A, LA, IW, LIW, W(1), LWC,
991 & RHSCOMP, LRHSCOMP, POSINRHSCOMP_BWD,
992 & IW1(PTRICB),PTRACB,IWCB,LIWW, W2,
994 & STEP, FRERE,DAD,FILS,
995 & IW1(IPOOL),LPOOL,PTRIST,PTRFAC,MYLEAF,MYROOT,ICNTL,INFO,
996 & PROCNODE_STEPS, SLAVEF, COMM_NODES, MYID_NODES,
997 & BUFR, LBUFR, LBUFR_BYTES, KEEP, KEEP8, DKEEP,
998 & RHS_ROOT, LRHS_ROOT,
1000 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, IW1(IPANEL_POS),
1001 & LPANEL_POS, PRUN_BELOW_BWD, TO_PROCESS, SIZE_TO_PROCESS
1002 & , RHS_BOUNDS, LRHS_BOUNDS, DO_NBSPARSE_BWD
1004 & , L0_OMP_MAPPING, LL0_OMP_MAPPING,
1005 & L0_OMP_FACTORS, LL0_OMP_FACTORS
1007.AND.
IF ( DO_L0OMP_BWD DO_PRUN ) THEN
1008 DO I = 1, L_PHYS_L0_OMP
1009.LT.
IF ( PHYS_L0_OMP( I ) 0 ) THEN
1010 PHYS_L0_OMP( I ) = -PHYS_L0_OMP( I )
1011 TO_PROCESS(STEP(PHYS_L0_OMP( I ) )) = .TRUE.
1015.AND..GE.
IF (DO_L0OMP_BWD INFO(1) 0) THEN
1017 PRUN_BELOW_BWD = AM1
1018 CALL DMUMPS_SOL_L0OMP_S(N, MTYPE_LOC, NRHS, LIW, IW,
1019 & IW1(PTRICB), PTRACB, RHSCOMP, LRHSCOMP, POSINRHSCOMP_BWD,
1020 & STEP, FRERE, FILS, NE_STEPS, PTRIST, PTRFAC, INFO,
1021 & KEEP, KEEP8, DKEEP, PROCNODE_STEPS, SLAVEF,
1022 & COMM_NODES, MYID_NODES, BUFR, LBUFR, LBUFR_BYTES,
1023 & RHS_ROOT, LRHS_ROOT, ISTEP_TO_INIV2, TAB_POS_IN_PERE,
1024 & IW1(IPANEL_POS), LPANEL_POS,
1025 & PRUN_BELOW_BWD, TO_PROCESS, SIZE_TO_PROCESS,
1026 & RHS_BOUNDS, LRHS_BOUNDS, DO_NBSPARSE_BWD,
1029 & L_VIRT_L0_OMP, VIRT_L0_OMP,
1030 & L_PHYS_L0_OMP, PHYS_L0_OMP,
1031 & PERM_L0_OMP, PTR_LEAFS_L0_OMP,
1032 & L0_OMP_MAPPING, LL0_OMP_MAPPING,
1033 & L0_OMP_FACTORS, LL0_OMP_FACTORS )
1035 CALL DMUMPS_CLEAN_PENDING( INFO(1), KEEP,
1036 & BUFR, LBUFR,LBUFR_BYTES,
1037 & COMM_NODES, IDUMMY,
1038 & SLAVEF, .TRUE., .FALSE. )
1039 CALL MUMPS_PROPINFO(ICNTL, INFO, COMM_NODES, MYID )
1041 CALL VTEND(back_soln,ierr)
1043.NOT.
IF (FROM_PP) THEN
1044 CALL MUMPS_SECFIN(TIME_BWD)
1045 DKEEP(118)=TIME_BWD+DKEEP(118)
1048.GT..AND..GT.
IF (LDIAG2 MP0) THEN
1050 K = min0(10,size(RHSCOMP,1))
1051.EQ.
IF (LDIAG4) K = size(RHSCOMP,1)
1052.NOT.
IF ( FROM_PP) THEN
1054.GT.
IF (size(RHSCOMP,1)0)
1055 & WRITE (MP,99993) (RHSCOMP(I,1),I=1,K)
1056.GT..and.
IF (size(RHSCOMP,1)0NRHS>1)
1057 & WRITE (MP,99994) (RHSCOMP(I,2),I=1,K)
1062 IF ( allocated(TO_PROCESS)) DEALLOCATE (TO_PROCESS)
1063.OR..OR.
IF (Exploit_SparsityAM1SWITCH_OFF_ES) THEN
1064 IF ( allocated(nodes_RHS)) DEALLOCATE (nodes_RHS)
1065 IF ( allocated(Pruned_SONS)) DEALLOCATE (Pruned_SONS)
1066 IF ( allocated(Pruned_Roots)) DEALLOCATE (Pruned_Roots)
1067 IF ( allocated(Pruned_List)) DEALLOCATE (Pruned_List)
1068 IF ( allocated(Pruned_Leaves)) DEALLOCATE (Pruned_Leaves)
107199993 FORMAT (' RHS (internal, first column)'/(1X,1P,5D14.6))
107299994 FORMAT (' RHS (internal, 2 nd column)'/(1X,1P,5D14.6))
107399992 FORMAT (//' LEAVING SOLVE (DMUMPS_SOL_C) WITH')
subroutine dmumps_gather_solution(nslaves, n, myid, comm, nrhs, mtype, rhs, lrhs, ncol_rhs, jbeg_rhs, ptrist, keep, keep8, procnode_steps, iw, liw, step, buffer, size_buf, size_buf_bytes, cwork, lcwork, lscal, scaling, lscaling, rhscomp, lrhscomp, ncol_rhscomp, posinrhscomp, lpos_n, perm_rhs, size_perm_rhs)
subroutine dmumps_sol_c(root, n, a, la, iw, liw, w, lwc, iwcb, liww, nrhs, na, lna, ne_steps, w2, mtype, icntl, from_pp, step, frere, dad, fils, ptrist, ptrfac, iw1, liw1, ptracb, liwk_ptracb, procnode_steps, slavef, info, keep, keep8, dkeep, comm_nodes, myid, myid_nodes, bufr, lbufr, lbufr_bytes, istep_to_iniv2, tab_pos_in_pere, ibeg_root_def, iend_root_def, iroot_def_rhs_col1, rhs_root, lrhs_root, size_root, master_root, rhscomp, lrhscomp, posinrhscomp_fwd, posinrhscomp_bwd, nz_rhs, nbcol_inbloc, nrhs_orig, jbeg_rhs, step2node, lstep2node, irhs_sparse, irhs_ptr, size_perm_rhs, perm_rhs, size_uns_perm_inv, uns_perm_inv, nb_fs_in_rhscomp_f, nb_fs_in_rhscomp_tot, do_nbsparse, rhs_bounds, lrhs_bounds, ipool_b_l0_omp, lpool_b_l0_omp, ipool_a_l0_omp, lpool_a_l0_omp, l_virt_l0_omp, virt_l0_omp, l_phys_l0_omp, phys_l0_omp, perm_l0_omp, ptr_leafs_l0_omp, l0_omp_mapping, ll0_omp_mapping, l0_omp_factors, ll0_omp_factors)
subroutine dmumps_sol_l0omp_s(n, mtype, nrhs, liw, iw, ptricb, ptracb, rhscomp, lrhscomp, posinrhscomp_bwd, step, frere, fils, ne_steps, ptrist, ptrfac, info, keep, keep8, dkeep, procnode_steps, slavef, comm, myid, bufr, lbufr, lbufr_bytes, rhs_root, lrhs_root, istep_to_iniv2, tab_pos_in_pere, panel_pos, lpanel_pos, prun_below_bwd, to_process, size_to_process, rhs_bounds, lrhs_bounds, do_nbsparse, from_pp, lpool_b_l0_omp, l_virt_l0_omp, virt_l0_omp, l_phys_l0_omp, phys_l0_omp, perm_l0_omp, ptr_leafs_l0_omp, l0_omp_mapping, ll0_omp_mapping, l0_omp_factors, ll0_omp_factors)
subroutine dmumps_sol_l0omp_r(n, mtype, nrhs, liw, iw, ptricb, rhscomp, lrhscomp, posinrhscomp_fwd, step, frere, dad, fils, nstk, ptrist, ptrfac, info, keep, keep8, dkeep, procnode_steps, slavef, comm, myid, bufr, lbufr, lbufr_bytes, rhs_root, lrhs_root, istep_to_iniv2, tab_pos_in_pere, rhs_bounds, lrhs_bounds, do_nbsparse, from_pp, nbroot_under_l0, lpool_b_l0_omp, ipool_b_l0_omp, l_virt_l0_omp, virt_l0_omp, l_phys_l0_omp, phys_l0_omp, perm_l0_omp, ptr_leafs_l0_omp, l0_omp_mapping, ll0_omp_mapping, l0_omp_factors, ll0_omp_factors, do_prun, to_process)