17 & IPTRLU, LRLU, LRLUS,
18 & N, IW, LIW, A, LA, SLAVEF, PROCNODE_STEPS, DAD,
19 & PTRIST, PTRAST, STEP, PIMASTER, PAMASTER, COMP,
20 & KEEP,KEEP8, DKEEP, ITLOC, RHS_MUMPS, ISTEP_TO_INIV2,
21#if ! defined(NO_FDM_DESCBAND)
28#if ! defined(NO_FDM_DESCBAND)
35 DOUBLE PRECISION DKEEP(230)
36 INTEGER LBUFR, LBUFR_BYTES
38 INTEGER(8) :: IPTRLU, LRLU, LRLUS, LA
39 INTEGER IWPOS, IWPOSCB, N, LIW
41 DOUBLE PRECISION A( LA )
42 INTEGER,
INTENT(IN) :: SLAVEF
43 INTEGER,
INTENT(IN) :: PROCNODE_STEPS(KEEP(28)), DAD(KEEP(28))
44 INTEGER(8) :: PAMASTER(KEEP(28))
45 INTEGER(8) :: PTRAST(KEEP(28))
46 INTEGER PTRIST(KEEP(28)), STEP(N),
48 & itloc( n + keep(253) )
49 DOUBLE PRECISION :: RHS_MUMPS(KEEP(255))
50 INTEGER :: ISTEP_TO_INIV2(KEEP(71))
51#if ! defined(NO_FDM_DESCBAND)
54 INTEGER COMP, , IERROR
55 INTEGER INODE, NBPROCFILS, NCOL, NROW, NASS, NSLAVES
56 INTEGER NSLAVES_HDR, NFRONT
61 INTEGER :: IWHANDLER_LOC
63 DOUBLE PRECISION FLOP1
64 include
'mumps_headers.h'
65#if ! defined(NO_FDM_DESCBAND)
66 INTEGER :: INFO_TMP(2)
70 INTEGER :: ESTIM_NFS4FATHER_ATSON
71 LOGICAL :: LR_ACTIVATED, COMPRESS_CB
72 DOUBLE PRECISION,
POINTER,
DIMENSION(:) :: DYNAMIC_CB
76 nbprocfils = bufr( 3 )
81 nslaves_hdr = bufr( 8 )
84 estim_nfs4father_atson = bufr(11)
86#if ! defined(NO_FDM_DESCBAND)
87 iwhandler_loc = iwhandler_in
88 IF ((iwhandler_in .LE. 0) .AND.
92 & iwhandler_loc, info_tmp)
93 IF (info_tmp(1) < 0)
THEN
101 IF ( keep(50) .eq. 0 )
THEN
102 flop1 = dble( nass * nrow ) +
103 & dble(nrow*nass)*dble(2*ncol-nass-1)
105 flop1 = dble( nass ) * dble( nrow )
106 & * dble( 2 * ncol - nrow - nass + 1)
109 IF ( keep(50) .eq. 0 )
THEN
110 nslaves = nslaves_hdr + xtra_slaves_unsym
112 nslaves = nslaves_hdr + xtra_slaves_sym
114 lreq = nrow + ncol + 6 + nslaves + keep(ixsz)
115 lreqcb = int(ncol,8) * int(nrow,8)
116 IF ( lreqcb .GT. lrlus .AND. keep(101) .EQ. 0 .AND.
117 & keep8(73) + lreqcb .LE. keep8(75) )
THEN
119 & myid,n, keep, keep8, dkeep, iw, liw, a, la,
120 & lrlu, iptrlu,iwpos,iwposcb, slavef, procnode_steps, dad,
121 & ptrist,ptrast, step, pimaster,pamaster,
123 & inode, s_active, .true.,
124 & comp, lrlus, keep8(67), iflag, ierror
126 IF ( iflag .LT. 0 )
RETURN
127#if defined(MUMPS_ALLOC_FROM_C)
128 CALL mumps_malloc_c( tmp_address,
129 & lreqcb * int(keep(35),8) )
130 IF (tmp_address .EQ. 0_8)
THEN
136 ALLOCATE(dynamic_cb(lreqcb), stat=allocok)
138 IF (allocok .GT. 0)
THEN
140 & iwposcb + 1, iw, liw, lrlu, lrlus, iptrlu, iwposcb,
141 & la, keep, keep8, .false. )
145 & keep8, iflag, ierror,
148#if ! defined(MUMPS_ALLOC_FROM_C)
149 CALL mumps_addr_c( dynamic_cb(1), tmp_address )
152 ptrist(step(inode)) = iwposcb + 1
153 ptrast(step(inode)) = tmp_address
156 IF ( ptrist(step(inode)) .EQ. 0 )
THEN
158 & myid,n, keep, keep8, dkeep, iw, liw, a, la,
159 & lrlu, iptrlu,iwpos,iwposcb, slavef, procnode_steps, dad,
160 & ptrist,ptrast, step, pimaster,pamaster,
161 & lreq, lreqcb, inode, s_active, .true.,
162 & comp, lrlus, keep8(67), iflag, ierror
164 IF ( iflag .LT. 0 )
RETURN
165 ptrist(step(inode)) = iwposcb + 1
166 ptrast(step(inode)) = iptrlu + 1_8
168# if ! defined(NO_FDM_DESCBAND)
171# if ! defined(NO_FDM_DESCBAND)
172 IF ((iwhandler_in .LE. 0) .AND.
176 iw(iwposcb+1+xxa) = iwhandler_loc
178 iw(iwposcb+1+xxf) = -9999
179 iw( iwposcb + 1+keep(ixsz) ) = ncol
180 iw( iwposcb + 2+keep(ixsz) ) = - nass
181 iw( iwposcb + 3+keep(ixsz) ) = nrow
182 iw( iwposcb + 4+keep(ixsz) ) = 0
183 iw( iwposcb + 5+keep(ixsz) ) = nass
184 iw( iwposcb + 6+keep(ixsz) ) = nslaves
185 iw( iwposcb + 7+keep(ixsz)+nslaves :
186 & iwposcb + 6+keep(ixsz)+nslaves + nrow + ncol )
187 &= bufr( ibufr + nslaves_hdr :
188 & ibufr + nslaves_hdr + nrow + ncol - 1 )
189 IF ( keep(50) .eq. 0 )
THEN
190 iw( iwposcb + 7+keep(ixsz) ) = s_rootband_init
191 IF (nslaves_hdr.GT.0)
THEN
192 write(6,*)
" Internal error in DMUMPS_PROCESS_DESC_BANDE "
196 iw( iwposcb+7+keep(ixsz) ) = huge(iw(iwposcb+7+keep(ixsz)))
198 iw( iwposcb + 9+keep(ixsz) ) = s_rootband_init
199 iw( iwposcb + 7+xtra_slaves_sym+keep(ixsz):
200 & iwposcb + 6+xtra_slaves_sym+keep(ixsz)+nslaves_hdr ) =
201 & bufr( ibufr: ibufr - 1 + nslaves_hdr )
203 iw(iwposcb+1+xxnbpr)=nbprocfils
204 iw(iwposcb+1+xxlr)=lrstatus
205 compress_cb = ((lrstatus.EQ.1).OR.
207 lr_activated = (lrstatus.GT.0)
208 IF (lr_activated.AND.
218 IF (info_tmp(1).LT.0)
THEN
224 & (keep(219).NE.0).AND.(keep(50).EQ.2).AND.
225 & (estim_nfs4father_atson.GE.0)
228 & estim_nfs4father_atson )
231 IF (nbprocfils .EQ. 0)
THEN
236 & COMM_LOAD, ASS_IRECV,
237 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
238 & IWPOS, IWPOSCB, IPTRLU,
239 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
241 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
242 & IFLAG, IERROR, COMM, PERM,
243 & IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
245 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
246 & FILS, DAD, PTRARW, PTRAIW,
247 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
248 & LPTRAR, NELT, FRTPTR, FRTELT,
250 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
251 & STACK_RIGHT_AUTHORIZED
254# if ! defined(NO_FDM_DESCBAND)
259 INTEGER,
INTENT(IN) :: inode
260 TYPE (dmumps_root_struc) :: root
261 INTEGER keep(500), icntl(60)
262 INTEGER(8) keep8(150)
263 DOUBLE PRECISION dkeep(230)
264 INTEGER lbufr, lbufr_bytes
265 INTEGER comm_load, ass_irecv
266 INTEGER bufr( lbufr )
267 INTEGER(8) :: la, posfac, iptrlu, lrlu, lrlus
268 INTEGER iwpos, iwposcb
271 DOUBLE PRECISION a( la )
272 INTEGER,
intent(in) :: lrgroups(n)
273 INTEGER(8) :: ptrast(keep(28))
274 INTEGER(8) :: ptrfac(keep(28))
275 INTEGER(8) :: pamaster(keep(28))
276 INTEGER ptrist( keep(28) ),
281 INTEGER nstk_s((28)), procnode_steps( keep(28) )
283 INTEGER iflag, ierror, comm
285 INTEGER ipool( lpool )
286 INTEGER myid, slavef, nbfin
287 DOUBLE PRECISION opassw, opeliw
289 INTEGER frtptr( n+1 ), frtelt( nelt )
290 INTEGER itloc( n + (253) ), fils( ), dad( keep(28) )
291 DOUBLE PRECISION :: rhs_mumps(keep(255))
292 INTEGER(8),
INTENT(IN) :: ptrarw( lptrar ), ptraiw( lptrar )
293 INTEGER nd( keep(28) ), frere( keep(28) )
294 INTEGER istep_to_iniv2(keep(71)),
295 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
296 DOUBLE PRECISION dblarr( keep8(26) )
297 INTEGER intarr( keep8(27) )
298 LOGICAL,
intent(in) :: stack_right_authorized
300 INCLUDE 'mumps_tags.h
'
301 INCLUDE 'mumps_headers.h
'
302 LOGICAL :: BLOCKING, SET_IRECV, MESSAGE_RECEIVED
303 INTEGER :: STATUS(MPI_STATUS_SIZE)
304 INTEGER :: SRC_DESCBAND
305#if ! defined(NO_FDM_DESCBAND)
307 TYPE(DESCBAND_STRUC_T), POINTER :: DESCBAND_STRUC
309 INTEGER MUMPS_PROCNODE
310 EXTERNAL MUMPS_PROCNODE
311 SRC_DESCBAND = MUMPS_PROCNODE( PROCNODE_STEPS(STEP(INODE)),
313# if ! defined(NO_FDM_DESCBAND)
314 IF (MUMPS_FDBD_IS_DESCBAND_STORED( INODE, IWHANDLER )) THEN
315 CALL MUMPS_FDBD_RETRIEVE_DESCBAND(IWHANDLER, DESCBAND_STRUC)
316 CALL DMUMPS_PROCESS_DESC_BANDE( MYID, DESCBAND_STRUC%BUFR(1),
317 & DESCBAND_STRUC%LBUFR,
320 & IPTRLU, LRLU, LRLUS,
321 & N, IW, LIW, A, LA, SLAVEF, PROCNODE_STEPS, DAD,
322 & PTRIST, PTRAST, STEP, PIMASTER, PAMASTER, COMP,
323 & KEEP, KEEP8, DKEEP, ITLOC, RHS_MUMPS, ISTEP_TO_INIV2,
326.LT.
IF (IFLAG 0) GOTO 500
327 CALL MUMPS_FDBD_FREE_DESCBAND_STRUC(IW(PTRIST(STEP(INODE))+XXA))
329.GT.
IF (INODE_WAITED_FOR0) THEN
330 WRITE(*,*) " Internal error 1 in DMUMPS_TREAT_DESCBAND",
331 & INODE, INODE_WAITED_FOR
334 INODE_WAITED_FOR = INODE
336.EQ.
DO WHILE (PTRIST(STEP(INODE)) 0)
339 MESSAGE_RECEIVED = .FALSE.
340 CALL DMUMPS_TRY_RECVTREAT(COMM_LOAD,
341 & ASS_IRECV, BLOCKING, SET_IRECV, MESSAGE_RECEIVED,
342 & SRC_DESCBAND, MAITRE_DESC_BANDE,
344 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
345 & IWPOS, IWPOSCB, IPTRLU,
346 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
348 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
349 & IFLAG, IERROR, COMM,
350 & PERM, IPOOL, LPOOL, LEAF,
351 & NBFIN, MYID, SLAVEF,
352 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
353 & FILS, DAD, PTRARW, PTRAIW,
354 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
355 & LPTRAR, NELT, FRTPTR, FRTELT,
356 & ISTEP_TO_INIV2, TAB_POS_IN_PERE, .TRUE.
359.LT.
IF (IFLAG 0) THEN
363# if ! defined(NO_FDM_DESCBAND)
364 INODE_WAITED_FOR = -1
369 CALL DMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
subroutine dmumps_alloc_cb(inplace, min_space_in_place, ssarbr, process_bande, myid, n, keep, keep8, dkeep, iw, liw, a, la, lrlu, iptrlu, iwpos, iwposcb, slavef, procnode_steps, dad, ptrist, ptrast, step, pimaster, pamaster, lreq, lreqcb, node_arg, state_arg, set_header, comp, lrlus, lrlusm, iflag, ierror)
recursive subroutine dmumps_treat_descband(inode, comm_load, ass_irecv, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, perm, ipool, lpool, leaf, nbfin, myid, slavef root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, nd, frere, lptrar, nelt, frtptr, frtelt istep_to_iniv2, tab_pos_in_pere, stack_right_authorized, lrgroups)
subroutine dmumps_process_desc_bande(myid, bufr, lbufr, lbufr_bytes, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, slavef, procnode_steps, dad, ptrist, ptrast, step, pimaster, pamaster, comp, keep, keep8, dkeep, itloc, rhs_mumps, istep_to_iniv2, iwhandler_in, iflag, ierror)