34 IMPLICIT NONE
35 INTEGER MTYPE
36 INTEGER(8), intent(in) ::
37 INTEGER(8), intent(in) ::
38 INTEGER, intent(in) :: N,LIW,LIWW,LPOOL
39 INTEGER, intent(in) :: SLAVEF,MYLEAF,MYROOT,COMM,MYID
40 INTEGER KEEP( 500 )
41 INTEGER(8) KEEP8(150)
42 REAL, INTENT(INOUT) :: DKEEP(230)
43 INTEGER PROCNODE_STEPS((28))
44 INTEGER NE_STEPS(KEEP(28))
45 INTEGER IPOOL(LPOOL)
46 INTEGER LPANEL_POS
47 INTEGER PANEL_POS()
48 INTEGER ICNTL(60), INFO(80)
49 INTEGER PTRIST(KEEP(28)),
50 & PTRICB(KEEP(28))
51 INTEGER(8) :: PTRACB(KEEP(28))
52 INTEGER(8) :: PTRFAC(KEEP(28))
53 INTEGER NRHS
54 REAL A(LA), W(LWC)
55 REAL 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
59 INTEGER BUFR(LBUFR)
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 REAL RHSCOMP(LRHSCOMP,NRHS)
64 INTEGER(8), intent(in) :: LRHS_ROOT
65 REAL RHS_ROOT( LRHS_ROOT )
66 LOGICAL, INTENT(in) :: PRUN_BELOW
67 INTEGER, intent(in)
68LOGICAL, 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 (SMUMPS_L0OMPFAC_T), INTENT(IN) ::
76 & L0_OMP_FACTORS(LL0_OMP_FACTORS)
77 include 'mpif.h'
78 include 'mumps_tags.h'
79 LOGICAL FLAG
80 REAL, DIMENSION(:), POINTER ::
81 INTEGER(8) :: LA_PTR
82 INTEGER :: UNDERL0MAP
83 INTEGER(8) :: POSWCB, PLEFTW
84 INTEGER POSIWCB
85 INTEGER NBFINF
86 INTEGER INODE
87 INTEGER III,IIPOOL,MYLEAF_LEFT
88 LOGICAL BLOQ
89 INTEGER DUMMY(1)
90 LOGICAL :: ERROR_WAS_BROADCASTED, DO_MCAST2_TERMBWD
91 LOGICAL :: ALLOW_OTHERS_TO_LEAVE
92 LOGICAL, DIMENSION(:), ALLOCATABLE :: DEJA_SEND
93 INTEGER :: allocok
94 dummy(1)=0
95 keep(266)=0
96 ALLOCATE(deja_send( 0:slavef-1 ), stat=allocok)
97 if(allocok.ne.0) then
98 WRITE(6,*) ' Allocation error of DEJA_SEND in '
99 & //'routine SMUMPS_SOL_S '
100 info(1)=-13
101 info(2)=slavef
102 endif
104 IF ( info(1) .LT.0 ) GOTO 340
105 pleftw = 1_8
106 posiwcb = liww
107 poswcb = lwc
108 iii = 1
109 iipool = myroot + 1
110 myleaf_left = myleaf
111 nbfinf = slavef
112 allow_others_to_leave = ( myleaf_left .EQ. 0 .AND.
113 & keep(31) .EQ. 0 )
114 allow_others_to_leave = allow_others_to_leave .OR.
115 & keep(31) .EQ. 1
116 IF (allow_others_to_leave) THEN
117 CALL smumps_mcast2(dummy, 1, mpi_integer, myid, comm, termbwd,
118 & slavef, keep)
119 nbfinf = nbfinf - 1
120 IF (nbfinf .EQ. 0 .AND. myleaf_left .EQ. 0) THEN
121 GOTO 340
122 ENDIF
123 ENDIF
124 error_was_broadcasted = .false.
125 do_mcast2_termbwd = .false.
126 DO WHILE ( nbfinf .NE. 0 .OR. myleaf_left .NE. 0 )
127 bloq = ( iii .EQ. iipool )
129 & lbufr_bytes, myid, slavef, comm,
130 & n, iwcb, liww, posiwcb,
131 & w, lwc, poswcb,
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,
137 & nrhs, mtype,
138 & rhscomp, lrhscomp, posinrhscomp_bwd
139 & , prun_below, to_process, size_to_process
140 & , from_pp
141 & )
142 IF ( info(1) .LT. 0 ) GOTO 340
143 IF ( .NOT. flag ) THEN
144 IF (iii .NE. iipool) THEN
145 inode = ipool(iipool-1)
146 iipool = iipool - 1
147 IF (keep(400) .GT. 0 ) THEN
148 underl0map = l0_omp_mapping(step(inode))
149 ELSE
150 underl0map = 0
151 ENDIF
152 IF (underl0map .EQ. 0 .OR. keep(201).GT.0) THEN
155 la_ptr = la
156 ELSE
157 a_ptr => l0_omp_factors(underl0map)%A
158 la_ptr = l0_omp_factors(underl0map)%LA
159 ENDIF
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,
166 & ne_steps, step,
167 & frere, fils, ptrist, ptrfac,
168 & myleaf_left, info,
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
177 & )
178 IF ( info(1) .LT. 0 ) THEN
179 IF (.NOT. error_was_broadcasted) THEN
180 IF (nbfinf .EQ. 0 ) THEN
182 ENDIF
183 ENDIF
184 ENDIF
185 IF (do_mcast2_termbwd) THEN
187 & termbwd, slavef, keep )
188 ENDIF
189 ENDIF
190 END IF
191 ENDDO
192 340 CONTINUE
193 IF (ALLOCATED(deja_send)) DEALLOCATE(deja_send)
194 RETURN
subroutine mumps_propinfo(icntl, info, comm, id)
subroutine, public smumps_get_tmp_ptr(ptr)
subroutine smumps_set_static_ptr(array)
subroutine smumps_bdc_error(myid, slavef, comm, keep)
subroutine smumps_mcast2(data, ldata, mpitype, root, commw, tag, slavef, keep)
recursive subroutine smumps_backslv_recv_and_treat(bloq, flag, bufr, lbufr, lbufr_bytes, myid, slavef, comm, n, iwcb, liww, posiwcb, w, lwc, poswcb, iipool, nbfinf, ptricb, ptracb, info, ipool, lpool, panel_pos, lpanel_pos, step, frere, fils, procnode_steps, pleftw, keep, keep8, dkeep, ptrist, ptrfac, iw, liw, a, la, w2, myleaf_left, nrhs, mtype, rhscomp, lrhscomp, posinrhscomp_bwd, prun_below, to_process, size_to_process, from_pp)
subroutine smumps_solve_node_bwd(inode, n, ipool, lpool, iipool, nbfinf, a, la, iw, liw, w, lwc, nrhs, poswcb, pleftw, posiwcb, rhscomp, lrhscomp, posinrhscomp_bwd, ptricb, ptracb, iwcb, liww, w2, ne_steps, step, frere, fils, ptrist, ptrfac, myleaf_left, info, procnode_steps, deja_send, 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, error_was_broadcasted, do_mcast2_termbwd)