16 & RHSCOMP, LRHSCOMP, POSINRHSCOMP_BWD,
17 & PTRICB, PTRACB, IWCB, LIWW, W2,
19 & FRERE, DAD, FILS, IPOOL, LPOOL, PTRIST, PTRFAC,
20 & MYLEAF, MYROOT, ICNTL, INFO,
22 & SLAVEF, COMM,MYID, BUFR, LBUFR, LBUFR_BYTES,
23 & KEEP,KEEP8, DKEEP, RHS_ROOT, LRHS_ROOT, MTYPE,
25 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, PANEL_POS, LPANEL_POS
26 & , PRUN_BELOW, TO_PROCESS, SIZE_TO_PROCESS
27 & , RHS_BOUNDS, LRHS_BOUNDS, DO_NBSPARSE, FROM_PP
28 & , L0_OMP_MAPPING, LL0_OMP_MAPPING,
29 & L0_OMP_FACTORS, LL0_OMP_FACTORS
36 INTEGER(8),
intent(in) :: LA
37 INTEGER(8),
intent(in) ::
38 INTEGER,
intent(in) :: N,LIW,LIWW,LPOOL
39 INTEGER,
intent(in) :: SLAVEF,MYLEAF,MYROOT,COMM,MYID
42 DOUBLE PRECISION,
INTENT(INOUT) :: DKEEP(230)
43 INTEGER PROCNODE_STEPS(KEEP(28))
44 INTEGER NE_STEPS(KEEP(28))
47 INTEGER PANEL_POS(LPANEL_POS)
48 INTEGER ICNTL(60), INFO(80)
49 INTEGER PTRIST(KEEP(28)),
51 INTEGER(8) :: PTRACB(KEEP(28))
52 INTEGER(8) :: PTRFAC(KEEP(28))
54 DOUBLE PRECISION A(LA), W(LWC)
55 DOUBLE PRECISION W2(KEEP(133))
56 INTEGER IW(LIW),IWCB(LIWW)
57 INTEGER STEP(N), FRERE(KEEP(28)),DAD(KEEP(28)),FILS(N)
58 INTEGER LBUFR, LBUFR_BYTES
60 INTEGER ISTEP_TO_INIV2(KEEP(71)),
61 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
62 INTEGER LRHSCOMP, POSINRHSCOMP_BWD(N)
63 DOUBLE PRECISION RHSCOMP(LRHSCOMP,NRHS)
64 INTEGER(8),
intent(in) :: LRHS_ROOT
65 DOUBLE PRECISION RHS_ROOT( LRHS_ROOT )
66 LOGICAL,
INTENT(in) :: PRUN_BELOW
67 INTEGER,
intent(in) :: SIZE_TO_PROCESS
68 LOGICAL,
intent(in) :: TO_PROCESS(SIZE_TO_PROCESS)
69 LOGICAL,
intent(in) :: DO_NBSPARSE
70 INTEGER,
intent(in) :: LRHS_BOUNDS
71 INTEGER,
intent(in) :: RHS_BOUNDS(LRHS_BOUNDS)
72 LOGICAL,
intent(in) :: FROM_PP
73 INTEGER,
INTENT( in ) :: LL0_OMP_MAPPING, LL0_OMP_FACTORS
74 INTEGER,
INTENT( in ) :: L0_OMP_MAPPING( LL0_OMP_MAPPING )
75 TYPE (DMUMPS_L0OMPFAC_T),
INTENT(IN) ::
76 & l0_omp_factors(ll0_omp_factors)
78 include 'mumps_tags.h
'
80 DOUBLE PRECISION, DIMENSION(:), POINTER :: A_PTR
83 INTEGER(8) :: POSWCB, PLEFTW
87 INTEGER III,IIPOOL,MYLEAF_LEFT
90 LOGICAL :: ERROR_WAS_BROADCASTED, DO_MCAST2_TERMBWD
91 LOGICAL :: ALLOW_OTHERS_TO_LEAVE
92 LOGICAL, DIMENSION(:), ALLOCATABLE :: DEJA_SEND
96 ALLOCATE(DEJA_SEND( 0:SLAVEF-1 ), stat=allocok)
98 WRITE(6,*) ' allocation error of deja_send in
'
103 CALL MUMPS_PROPINFO( ICNTL, INFO, COMM, MYID )
104.LT.
IF ( INFO(1) 0 ) GOTO 340
112.EQ..AND.
ALLOW_OTHERS_TO_LEAVE = ( MYLEAF_LEFT 0
114.OR.
ALLOW_OTHERS_TO_LEAVE = ALLOW_OTHERS_TO_LEAVE
116 IF (ALLOW_OTHERS_TO_LEAVE) THEN
117 CALL DMUMPS_MCAST2(DUMMY, 1, MPI_INTEGER, MYID, COMM, TERMBWD,
120.EQ..AND..EQ.
IF (NBFINF 0 MYLEAF_LEFT 0) THEN
124 ERROR_WAS_BROADCASTED = .FALSE.
125 DO_MCAST2_TERMBWD = .FALSE.
126.NE..OR..NE.
DO WHILE ( NBFINF 0 MYLEAF_LEFT 0 )
127.EQ.
BLOQ = ( III IIPOOL )
128 CALL DMUMPS_BACKSLV_RECV_AND_TREAT( BLOQ, FLAG, BUFR, LBUFR,
129 & LBUFR_BYTES, MYID, SLAVEF, COMM,
130 & N, IWCB, LIWW, POSIWCB,
132 & IIPOOL, NBFINF, PTRICB, PTRACB, INFO,
133 & IPOOL, LPOOL, PANEL_POS, LPANEL_POS,
134 & STEP, FRERE, FILS, PROCNODE_STEPS,
135 & PLEFTW, KEEP,KEEP8, DKEEP,
136 & PTRIST, PTRFAC, IW, LIW, A, LA, W2, MYLEAF_LEFT,
138 & RHSCOMP, LRHSCOMP, POSINRHSCOMP_BWD
139 & , PRUN_BELOW, TO_PROCESS, SIZE_TO_PROCESS
142.LT.
IF ( INFO(1) 0 ) GOTO 340
143.NOT.
IF ( FLAG ) THEN
144.NE.
IF (III IIPOOL) THEN
145 INODE = IPOOL(IIPOOL-1)
147.GT.
IF (KEEP(400) 0 ) THEN
148 UNDERL0MAP = L0_OMP_MAPPING(STEP(INODE))
152.EQ..OR..GT.
IF (UNDERL0MAP 0 KEEP(201)0) THEN
153 CALL DMUMPS_SET_STATIC_PTR(A)
154 CALL DMUMPS_GET_TMP_PTR(A_PTR)
157 A_PTR => L0_OMP_FACTORS(UNDERL0MAP)%A
158 LA_PTR = L0_OMP_FACTORS(UNDERL0MAP)%LA
160 CALL DMUMPS_SOLVE_NODE_BWD( INODE,
161 & N, IPOOL, LPOOL, IIPOOL, NBFINF,
162 & A_PTR(1), LA_PTR, IW, LIW, W, LWC, NRHS,
163 & POSWCB, PLEFTW, POSIWCB,
164 & RHSCOMP, LRHSCOMP, POSINRHSCOMP_BWD,
165 & PTRICB, PTRACB, IWCB, LIWW, W2,
167 & FRERE, FILS, PTRIST, PTRFAC,
169 & PROCNODE_STEPS, DEJA_SEND,
170 & SLAVEF, COMM, MYID, BUFR, LBUFR, LBUFR_BYTES,
171 & KEEP,KEEP8, DKEEP, RHS_ROOT, LRHS_ROOT, MTYPE,
172 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, PANEL_POS, LPANEL_POS,
173 & PRUN_BELOW, TO_PROCESS, SIZE_TO_PROCESS
174 & , RHS_BOUNDS, LRHS_BOUNDS, DO_NBSPARSE, FROM_PP
175 & , ERROR_WAS_BROADCASTED
176 & , DO_MCAST2_TERMBWD
178.LT.
IF ( INFO(1) 0 ) THEN
179.NOT.
IF ( ERROR_WAS_BROADCASTED) THEN
180.EQ.
IF (NBFINF 0 ) THEN
181 CALL DMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
185 IF (DO_MCAST2_TERMBWD) THEN
186 CALL DMUMPS_MCAST2( DUMMY, 1, MPI_INTEGER, MYID, COMM,
187 & TERMBWD, SLAVEF, KEEP )
193 IF (ALLOCATED(DEJA_SEND)) DEALLOCATE(DEJA_SEND)
subroutine dmumps_sol_s(n, a, la, iw, liw, w, lwc, nrhs, rhscomp, lrhscomp, posinrhscomp_bwd, ptricb, ptracb, iwcb, liww, w2, ne_steps, step, frere, dad, fils, ipool, lpool, ptrist, ptrfac, myleaf, myroot, icntl, info, procnode_steps, slavef, comm, myid, bufr, lbufr, lbufr_bytes, keep, keep8, dkeep, rhs_root, lrhs_root, mtype, istep_to_iniv2, tab_pos_in_pere, panel_pos, lpanel_pos, prun_below, to_process, size_to_process, rhs_bounds, lrhs_bounds, do_nbsparse, from_pp, l0_omp_mapping, ll0_omp_mapping, l0_omp_factors, ll0_omp_factors)