OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
zfac_process_blfac_slave.F File Reference

Go to the source code of this file.

Functions/Subroutines

recursive subroutine zmumps_process_blfac_slave (comm_load, ass_irecv, bufr, lbufr, lbufr_bytes, procnode_steps, msgsou, slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptrast, nstk_s, perm, comp, step, pimaster, pamaster, posfac, myid, comm, iflag, ierror, nbfin ptlust_s, ptrfac, root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, ipool, lpool, leaf, nd, frere_steps, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)

Function/Subroutine Documentation

◆ zmumps_process_blfac_slave()

recursive subroutine zmumps_process_blfac_slave ( integer comm_load,
integer ass_irecv,
integer, dimension( lbufr ) bufr,
integer lbufr,
integer lbufr_bytes,
integer, dimension(keep(28)) procnode_steps,
integer msgsou,
integer slavef,
integer iwpos,
integer iwposcb,
integer(8) iptrlu,
integer(8) lrlu,
integer(8) lrlus,
integer n,
integer, dimension( liw ) iw,
integer liw,
complex(kind=8), dimension( la ) a,
integer(8) la,
integer, dimension(keep(28)) ptrist,
integer(8), dimension(keep(28)) ptrast,
integer, dimension(keep(28)) nstk_s,
integer, dimension(n) perm,
integer comp,
integer, dimension(n) step,
integer, dimension(keep(28)) pimaster,
integer(8), dimension(keep(28)) pamaster,
integer(8) posfac,
integer myid,
integer comm,
integer iflag,
integer ierror,
integer nbfin,
integer, dimension(keep(28)) ptlust_s,
integer(8), dimension(keep(28)) ptrfac,
type (zmumps_root_struc) root,
double precision opassw,
double precision opeliw,
integer, dimension( n + keep(253)) itloc,
complex(kind=8), dimension(keep(255)) rhs_mumps,
integer, dimension( n ) fils,
integer, dimension( keep(28) ) dad,
integer(8), dimension( lptrar ), intent(in) ptrarw,
integer(8), dimension( lptrar ), intent(in) ptraiw,
integer, dimension( keep8(27) ) intarr,
complex(kind=8), dimension( keep8(26) ) dblarr,
integer, dimension( 60 ) icntl,
integer, dimension( 500 ) keep,
integer(8), dimension(150) keep8,
double precision, dimension(230) dkeep,
integer, dimension( lpool ) ipool,
integer lpool,
integer leaf,
integer, dimension( keep(28) ) nd,
integer, dimension( keep(28) ) frere_steps,
integer lptrar,
integer nelt,
integer, dimension( n + 1 ) frtptr,
integer, dimension( nelt ) frtelt,
integer, dimension(keep(71)) istep_to_iniv2,
integer, dimension(slavef+2,max(1,keep(56))) tab_pos_in_pere,
integer, dimension(n), intent(in) lrgroups )

Definition at line 14 of file zfac_process_blfac_slave.F.

31 USE zmumps_buf
32 USE zmumps_load
37 USE zmumps_struc_def, ONLY : zmumps_root_struc
40#if defined(BLR_MT)
41!$ USE OMP_LIB
42#endif
43 IMPLICIT NONE
44 TYPE (ZMUMPS_ROOT_STRUC) :: root
45 INTEGER ICNTL( 60 ), KEEP( 500 )
46 INTEGER(8) KEEP8(150)
47 DOUBLE PRECISION DKEEP(230)
48 INTEGER LBUFR, LBUFR_BYTES
49 INTEGER COMM_LOAD, ASS_IRECV
50 INTEGER BUFR( LBUFR )
51 INTEGER N, SLAVEF, IWPOS, IWPOSCB, LIW
52 INTEGER(8) :: POSFAC, IPTRLU, LRLU, LRLUS, LA
53 INTEGER(8) :: PTRAST(KEEP(28))
54 INTEGER(8) :: PAMASTER(KEEP(28))
55 INTEGER(8) :: PTRFAC(KEEP(28))
56 INTEGER COMP
57 INTEGER IFLAG, IERROR, NBFIN, MSGSOU
58 INTEGER PROCNODE_STEPS(KEEP(28)), PTRIST(KEEP(28)),
59 & NSTK_S(KEEP(28))
60 INTEGER PERM(N), STEP(N), PIMASTER(KEEP(28))
61 INTEGER IW( LIW )
62 COMPLEX(kind=8) A( LA )
63 INTEGER, intent(in) :: LRGROUPS(N)
64 INTEGER NELT, LPTRAR
65 INTEGER FRTPTR( N + 1 ), FRTELT( NELT )
66 INTEGER(8), INTENT(IN) :: PTRAIW( LPTRAR ), PTRARW( LPTRAR )
67 INTEGER ISTEP_TO_INIV2(KEEP(71)),
68 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
69 INTEGER COMM, MYID
70 INTEGER PTLUST_S(KEEP(28))
71 INTEGER ITLOC( N + KEEP(253)), FILS( N ), DAD( KEEP(28) )
72 COMPLEX(kind=8) :: RHS_MUMPS(KEEP(255))
73 INTEGER ND( KEEP(28) ), FRERE_STEPS( KEEP(28) )
74 DOUBLE PRECISION OPASSW, OPELIW
75 DOUBLE PRECISION FLOP1
76 COMPLEX(kind=8) DBLARR( KEEP8(26) )
77 INTEGER INTARR( KEEP8(27) )
78 INTEGER LEAF, LPOOL
79 INTEGER IPOOL( LPOOL )
80 include 'mumps_headers.h'
81 include 'mpif.h'
82 include 'mumps_tags.h'
83 INTEGER :: STATUS(MPI_STATUS_SIZE)
84 INTEGER MUMPS_PROCNODE
85 EXTERNAL mumps_procnode
86 INTEGER INODE, IPOSK, JPOSK, NCOLU, NPIV, POSITION, IERR
87 INTEGER(8) POSELT, POSBLOCFACTO
88 INTEGER(8) LAELL
89 INTEGER(8) :: LA_PTR
90 COMPLEX(kind=8), DIMENSION(:), POINTER :: A_PTR
91 INTEGER IOLDPS, LCONT1, NROW1, NCOL1, NPIV1
92 INTEGER NSLAVES_TOT, HS, DEST, NSLAVES_FOLLOW
93 INTEGER FPERE
94 INTEGER(8) CPOS, LPOS
95 LOGICAL DYNAMIC_ALLOC
96 LOGICAL BLOCKING, SET_IRECV, MESSAGE_RECEIVED
97 INTEGER allocok
98 INTEGER LR_ACTIVATED_INT
99 LOGICAL LR_ACTIVATED, COMPRESS_CB
100 INTEGER NB_BLR_U, CURRENT_BLR_U
101 TYPE (LRB_TYPE), DIMENSION(:), ALLOCATABLE :: BLR_U
102 INTEGER, POINTER, DIMENSION(:) :: BEGS_BLR_U
103 TYPE (LRB_TYPE), DIMENSION(:), POINTER :: BLR_LS
104 TYPE (LRB_TYPE), POINTER, DIMENSION(:,:) :: CB_LRB
105 INTEGER, POINTER, DIMENSION(:) :: BEGS_BLR_LS, BEGS_BLR_COL
106 INTEGER :: NB_BLR_LS, IPANEL,
107 & MAXI_CLUSTER_LS, MAXI_CLUSTER,
108 & NB_BLR_COL, MAXI_CLUSTER_COL, NPARTSASS_MASTER
109 COMPLEX(kind=8), ALLOCATABLE, DIMENSION(:) :: WORK, TAU
110 INTEGER, ALLOCATABLE, DIMENSION(:) :: JPVT
111 COMPLEX(kind=8), ALLOCATABLE, DIMENSION(:,:) :: BLOCKLR
112 DOUBLE PRECISION,ALLOCATABLE,DIMENSION(:) :: RWORK
113 INTEGER :: OMP_NUM, LWORK
114 INTEGER :: II,JJ
115 INTEGER :: NFS4FATHER, NASS1, NELIM, INFO_TMP(2)
116 INTEGER :: NVSCHUR_K253, NSLAVES_L, IROW_L
117 INTEGER :: NBROWSinF
118 DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: M_ARRAY
119 COMPLEX(kind=8), ALLOCATABLE, DIMENSION(:) :: UDYNAMIC
120 COMPLEX(kind=8) ONE,ALPHA
121 parameter(one=(1.0d0,0.0d0), alpha=(-1.0d0,0.0d0))
122 dynamic_alloc = .false.
123 position = 0
124 CALL mpi_unpack( bufr, lbufr_bytes, position, inode, 1,
125 & mpi_integer, comm, ierr )
126 CALL mpi_unpack( bufr, lbufr_bytes, position, iposk, 1,
127 & mpi_integer, comm, ierr )
128 CALL mpi_unpack( bufr, lbufr_bytes, position, jposk, 1,
129 & mpi_integer, comm, ierr )
130 CALL mpi_unpack( bufr, lbufr_bytes, position, npiv, 1,
131 & mpi_integer, comm, ierr )
132 IF ( npiv .LE. 0 ) THEN
133 npiv = - npiv
134 WRITE(*,*) myid,':error, received negative NPIV in BLFAC'
135 CALL mumps_abort()
136 END IF
137 CALL mpi_unpack( bufr, lbufr_bytes, position, fpere, 1,
138 & mpi_integer, comm, ierr )
139 CALL mpi_unpack( bufr, lbufr_bytes, position, ncolu, 1,
140 & mpi_integer, comm, ierr )
141 CALL mpi_unpack( bufr, lbufr_bytes, position,
142 & lr_activated_int, 1,
143 & mpi_integer, comm, ierr )
144 lr_activated = (lr_activated_int.EQ.1)
145 CALL mpi_unpack( bufr, lbufr_bytes, position,
146 & ipanel, 1,
147 & mpi_integer, comm, ierr )
148 IF (lr_activated) THEN
149 CALL mpi_unpack( bufr, lbufr_bytes, position,
150 & nb_blr_u, 1, mpi_integer,
151 & comm, ierr )
152 current_blr_u = 1
153 ALLOCATE(blr_u(max(nb_blr_u,1)),
154 & begs_blr_u(nb_blr_u+2), stat=allocok)
155 if (allocok .GT. 0) THEN
156 iflag = -13
157 ierror = max(nb_blr_u,1) + nb_blr_u+2
158 GOTO 700
159 endif
160 CALL zmumps_mpi_unpack_lr(bufr, lbufr, lbufr_bytes,
161 & position, jposk-1, 0, 'V',
162 & blr_u, nb_blr_u,
163 & begs_blr_u(1),
164 & keep8, comm, ierr, iflag, ierror)
165 IF (iflag.LT.0) GOTO 700
166 ELSE
167 laell = int(npiv,8) * int(ncolu,8)
169 & 0, laell, .false.,
170 & keep(1), keep8(1),
171 & n, iw, liw, a, la,
172 & lrlu, iptrlu,
173 & iwpos, iwposcb, ptrist, ptrast,
174 & step, pimaster, pamaster, lrlus,
175 & keep(ixsz),comp,dkeep(97),myid, slavef,
176 & procnode_steps, dad,
177 & iflag, ierror)
178 IF (iflag.LT.0) GOTO 700
179 lrlu = lrlu - laell
180 lrlus = lrlus - laell
181 keep8(67) = min(lrlus, keep8(67))
182 keep8(69) = keep8(69) + laell
183 keep8(68) = max(keep8(69), keep8(68))
184 posblocfacto = posfac
185 posfac = posfac + laell
186 CALL zmumps_load_mem_update(.false.,.false.,
187 & la-lrlus,0_8, laell,keep,keep8,lrlus)
188 CALL mpi_unpack( bufr, lbufr_bytes, position,
189 & a(posblocfacto), npiv*ncolu,
190 & mpi_double_complex,
191 & comm, ierr )
192 ENDIF
193 IF (ptrist(step( inode )) .EQ. 0) dynamic_alloc = .true.
194 IF ( (ptrist(step( inode )).NE.0) .AND.
195 & (iposk + npiv -1 .GT.
196 & iw(ptrist(step(inode))+3+keep(ixsz))) )THEN
197 dynamic_alloc = .true.
198 ENDIF
199 IF (lr_activated) THEN
200 dynamic_alloc = .false.
201 ENDIF
202 IF (dynamic_alloc) THEN
203 ALLOCATE(udynamic(laell), stat=allocok)
204 if (allocok .GT. 0) THEN
205 iflag = -13
206 CALL mumps_set_ierror(laell,ierror)
207 GOTO 700
208 endif
209 udynamic(1_8:laell) = a(posblocfacto:posblocfacto+laell-1_8)
210 lrlu = lrlu + laell
211 lrlus = lrlus + laell
212 keep8(69) = keep8(69) - laell
213 posfac = posfac - laell
214 CALL zmumps_load_mem_update(.false.,.false.,
215 & la-lrlus,0_8,-laell,keep,keep8,lrlus)
216 ENDIF
217 IF (ptrist(step( inode )) .EQ. 0) THEN
218 CALL zmumps_treat_descband( inode, comm_load, ass_irecv,
219 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
220 & iwpos, iwposcb, iptrlu,
221 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
222 & ptlust_s, ptrfac,
223 & ptrast, step, pimaster, pamaster, nstk_s, comp,
224 & iflag, ierror, comm,
225 & perm, ipool, lpool, leaf, nbfin, myid, slavef,
226 &
227 & root, opassw, opeliw, itloc, rhs_mumps,
228 & fils, dad, ptrarw, ptraiw,
229 & intarr, dblarr, icntl,keep,keep8,dkeep,nd, frere_steps,
230 & lptrar, nelt, frtptr, frtelt,
231 & istep_to_iniv2, tab_pos_in_pere, .true.
232 & , lrgroups
233 & )
234 IF ( iflag .LT. 0 ) GOTO 600
235 ENDIF
236 DO WHILE ( iposk + npiv -1 .GT.
237 & iw( ptrist(step( inode )) + 3 +keep(ixsz)) )
238 msgsou = mumps_procnode( procnode_steps(step(inode)),
239 & keep(199) )
240 blocking = .true.
241 set_irecv = .false.
242 message_received = .false.
243 CALL zmumps_try_recvtreat( comm_load,
244 & ass_irecv, blocking, set_irecv, message_received,
245 & msgsou, bloc_facto_sym, status,
246 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
247 & iwpos, iwposcb, iptrlu,
248 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
249 & ptlust_s, ptrfac,
250 & ptrast, step, pimaster, pamaster, nstk_s, comp,
251 & iflag, ierror, comm,
252 & perm, ipool, lpool, leaf, nbfin, myid, slavef,
253 &
254 & root, opassw, opeliw, itloc, rhs_mumps,
255 & fils, dad, ptrarw, ptraiw,
256 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere_steps,
257 & lptrar, nelt, frtptr, frtelt,
258 & istep_to_iniv2, tab_pos_in_pere, .true.
259 & , lrgroups
260 & )
261 IF ( iflag .LT. 0 ) GOTO 600
262 END DO
263 set_irecv = .true.
264 blocking = .false.
265 message_received = .true.
266 CALL zmumps_try_recvtreat( comm_load,
267 & ass_irecv, blocking, set_irecv, message_received,
268 & mpi_any_source, mpi_any_tag,
269 & status,
270 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
271 & iwpos, iwposcb, iptrlu,
272 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
273 & ptlust_s, ptrfac,
274 & ptrast, step, pimaster, pamaster, nstk_s, comp,
275 & iflag, ierror, comm,
276 & perm, ipool, lpool, leaf, nbfin, myid, slavef,
277 &
278 & root, opassw, opeliw, itloc, rhs_mumps,
279 & fils, dad, ptrarw, ptraiw,
280 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere_steps,
281 & lptrar, nelt, frtptr, frtelt,
282 & istep_to_iniv2, tab_pos_in_pere, .true.
283 & , lrgroups
284 & )
285 ioldps = ptrist(step( inode ))
286 CALL zmumps_dm_set_dynptr( iw(ioldps+xxs), a, la,
287 & ptrast(step(inode)), iw(ioldps+xxd), iw(ioldps+xxr),
288 & a_ptr, poselt, la_ptr )
289 lcont1 = iw( ioldps + keep(ixsz) )
290 nrow1 = iw( ioldps + 2 + keep(ixsz))
291 npiv1 = iw( ioldps + 3 + keep(ixsz))
292 nslaves_tot = iw( ioldps + 5 + keep(ixsz))
293 hs = 6 + nslaves_tot + keep(ixsz)
294 ncol1 = lcont1 + npiv1
295 IF (lr_activated) THEN
296 CALL zmumps_blr_dec_and_retrieve_l (iw(ioldps+xxf), ipanel,
297 & begs_blr_ls, blr_ls)
298 nb_blr_ls = size(begs_blr_ls)-2
299#if defined(blr_mt)
300!$OMP PARALLEL
301#endif
303 & a_ptr(poselt), la_ptr, 1_8,
304 & iflag, ierror, ncol1,
305 & begs_blr_ls(1), size(begs_blr_ls),
306 & begs_blr_u(1), size(begs_blr_u),
307 & current_blr_u,
308 & blr_ls(1), nb_blr_ls+1,
309 & blr_u(1), nb_blr_u+1,
310 & 0,
311 & .true.,
312 & 0,
313 & 2,
314 & 1,
315 & keep(481), dkeep(11), keep(466), keep(477)
316 & )
317#if defined(BLR_MT)
318!$OMP END PARALLEL
319#endif
320 CALL dealloc_blr_panel(blr_u, nb_blr_u, keep8, keep(34))
321 IF (allocated(blr_u)) DEALLOCATE(blr_u)
322 IF (associated(begs_blr_u)) DEALLOCATE(begs_blr_u)
323 IF (iflag.LT.0) GOTO 700
324 IF (keep(486).EQ.3) THEN
325 CALL zmumps_blr_try_free_panel(iw(ioldps+xxf), ipanel,
326 & keep8, keep(34))
327 ENDIF
328 ELSE
329 cpos = poselt + int(jposk - 1,8)
330 lpos = poselt + int(iposk - 1,8)
331 IF ( npiv .GT. 0 ) THEN
332 IF (dynamic_alloc) THEN
333 CALL zgemm( 'T', 'N', ncolu, nrow1, npiv, alpha,
334 & udynamic(1), npiv,
335 & a_ptr( lpos ), ncol1, one,
336 & a_ptr( cpos ), ncol1 )
337 ELSE
338 CALL zgemm( 'T', 'N', ncolu, nrow1, npiv, alpha,
339 & a( posblocfacto ), npiv,
340 & a_ptr( lpos ), ncol1, one,
341 & a_ptr( cpos ), ncol1 )
342 ENDIF
343 ENDIF
344 ENDIF
345 IF (npiv .GT. 0) THEN
346 flop1 = dble(ncolu*npiv)*dble(2*nrow1)
347 flop1 = -flop1
348 CALL zmumps_load_update(1, .false., flop1, keep,keep8 )
349 ENDIF
350 IF ( iw(ioldps+6+keep(ixsz)).EQ.
351 & huge(iw(ioldps+6+keep(ixsz))) ) THEN
352 iw(ioldps+6+keep(ixsz)) = 1
353 ENDIF
354 iw(ioldps+6+keep(ixsz)) =
355 & iw(ioldps+6+keep(ixsz)) + 1
356 IF (.NOT.lr_activated) THEN
357 IF (dynamic_alloc) THEN
358 DEALLOCATE(udynamic)
359 ELSE
360 lrlu = lrlu + laell
361 lrlus = lrlus + laell
362 keep8(69) = keep8(69) - laell
363 posfac = posfac - laell
364 CALL zmumps_load_mem_update(.false.,.false.,
365 & la-lrlus,0_8,-laell,keep,keep8,lrlus)
366 ENDIF
367 ENDIF
368 nslaves_follow = iw( ioldps + 5 +keep(ixsz) ) - xtra_slaves_sym
369 IF ( iw( ioldps + 6 +keep(ixsz)) .eq. 0 .and.
370 & keep(50) .ne. 0 .and. nslaves_follow .eq. 0 )
371 & THEN
372 dest = mumps_procnode( procnode_steps(step(inode)), keep(199) )
373 CALL zmumps_buf_send_1int( inode, dest, end_niv2_ldlt,
374 & comm, keep, ierr )
375 IF ( ierr .LT. 0 ) THEN
376 write(*,*) ' Internal error in PROCESS_BLFAC_SLAVE.'
377 iflag = -99
378 GOTO 700
379 END IF
380 END IF
381 IF (iw(ptrist(step(inode)) + 6+keep(ixsz) ) .eq. 0) THEN
382 npiv1 = iw( ioldps + 3 + keep(ixsz))
383 nass1 = iw( ioldps + 4 + keep(ixsz))
384 nelim = nass1 - npiv1
385 compress_cb= .false.
386 IF (lr_activated) THEN
387 compress_cb = ((iw(ptrist(step(inode))+xxlr).EQ.1).OR.
388 & (iw(ptrist(step(inode))+xxlr).EQ.3))
389 IF (compress_cb.AND.npiv.EQ.0) THEN
390 compress_cb = .false.
391 iw(ioldps+xxlr) = iw(ioldps+xxlr) -1
392 ENDIF
393 IF (compress_cb) THEN
394 CALL zmumps_blr_retrieve_begs_blr_c (iw(ioldps+xxf),
395 & begs_blr_col, npartsass_master)
396 nb_blr_col = size(begs_blr_col) - 1
397 allocate(cb_lrb(nb_blr_ls,nb_blr_col-npartsass_master),
398 & stat=allocok)
399 IF (allocok > 0) THEN
400 iflag = -13
401 ierror = nb_blr_ls*(nb_blr_col-npartsass_master)
402 GOTO 700
403 ENDIF
404 DO ii=1,nb_blr_ls
405 DO jj=1,nb_blr_col-npartsass_master
406 cb_lrb(ii,jj)%M=0
407 cb_lrb(ii,jj)%N=0
408 NULLIFY(cb_lrb(ii,jj)%Q)
409 NULLIFY(cb_lrb(ii,jj)%R)
410 cb_lrb(ii,jj)%ISLR = .false.
411 ENDDO
412 ENDDO
413 CALL zmumps_blr_save_cb_lrb(iw(ioldps+xxf),cb_lrb)
414 call max_cluster(begs_blr_ls,nb_blr_ls+1,maxi_cluster_ls)
415 CALL max_cluster(begs_blr_col,nb_blr_col,maxi_cluster_col)
416 maxi_cluster = max(maxi_cluster_ls,
417 & maxi_cluster_col+nelim,npiv)
418 lwork = maxi_cluster*maxi_cluster
419 omp_num = 1
420#if defined(BLR_MT)
421!$ omp_num = omp_get_max_threads()
422#endif
423 ALLOCATE(blocklr(maxi_cluster, omp_num*maxi_cluster),
424 & rwork(2*maxi_cluster*omp_num),
425 & tau(maxi_cluster*omp_num),
426 & jpvt(maxi_cluster*omp_num),
427 & work(lwork*omp_num),
428 & stat=allocok)
429 IF (allocok > 0 ) THEN
430 iflag = -13
431 ierror = omp_num*(lwork + maxi_cluster*(maxi_cluster+4))
432 GOTO 700
433 ENDIF
434 nfs4father = -9999
435 IF ( (keep(219).NE.0).AND.(keep(50).EQ.2) ) THEN
436 CALL zmumps_blr_retrieve_nfs4father ( iw(ioldps+xxf),
437 & nfs4father )
438 nfs4father = max(nfs4father,0) + nelim
439 ENDIF
440 ALLOCATE(m_array(max(nfs4father,1)), stat=allocok)
441 IF (allocok.gt.0) THEN
442 iflag = -13
443 ierror = max(nfs4father,1)
444 GOTO 700
445 ENDIF
446 begs_blr_col(1+npartsass_master) =
447 & begs_blr_col(1+npartsass_master) - nelim
448 nbrowsinf = 0
449 IF ( (keep(219).NE.0).AND.(keep(50).EQ.2).AND.
450 & nfs4father.GT.0 ) THEN
452 & n, inode, fpere, keep,
453 & ioldps, hs,
454 & iw, liw,
455 & nrow1, ncol1, npiv1,
456 & nelim, nfs4father,
457 & nbrowsinf
458 & )
459 ENDIF
460 IF ((keep(114).EQ.1) .AND. (keep(116).GT.0)
461 & .AND. (keep(50).EQ.2)
462 & ) THEN
463 nslaves_l = iw(ptrist(step(inode)) + 5 + keep(ixsz))
464 irow_l = ptrist(step(inode)) + 6 + nslaves_l +
465 & keep(ixsz)
467 & n,
468 & nrow1,
469 & keep(116),
470 & iw(irow_l),
471 & perm, nvschur_k253 )
472 ELSE
473 nvschur_k253 = 0
474 ENDIF
475#if defined(BLR_MT)
476!$OMP PARALLEL
477#endif
479 & a_ptr(poselt), la_ptr, 1_8, ncol1,
480 & begs_blr_ls(1), size(begs_blr_ls),
481 & begs_blr_col(1), size(begs_blr_col),
482 & nb_blr_ls, nb_blr_col-npartsass_master,
483 & npartsass_master,
484 & nrow1, ncol1-npiv1, inode,
485 & iw(ioldps+xxf), 1, 2, iflag, ierror,
486 & dkeep(12), keep(466), keep(484), keep(489),
487 & cb_lrb(1,1),
488 & work, tau, jpvt, lwork, rwork, blocklr,
489 & maxi_cluster, keep8, omp_num,
490 & nfs4father, npiv1, nvschur_k253, keep(1),
491 & m_array,
492 & nelim, nbrowsinf )
493#if defined(BLR_MT)
494!$OMP END PARALLEL
495#endif
496 IF (iflag.LT.0) GOTO 650
497 IF ( (keep(219).NE.0).AND.(keep(50).EQ.2).AND.
498 & nfs4father.GT.0 ) THEN
499 info_tmp(1) = iflag
500 info_tmp(2) = ierror
501 CALL zmumps_blr_save_m_array( iw(ioldps+xxf),
502 & m_array, info_tmp)
503 iflag = info_tmp(1)
504 ierror = info_tmp(2)
505 ENDIF
506 650 CONTINUE
507 IF (allocated(m_array)) DEALLOCATE(m_array)
508 IF (allocated(blocklr)) DEALLOCATE(blocklr)
509 IF (allocated(rwork)) DEALLOCATE(rwork)
510 IF (allocated(tau)) DEALLOCATE(tau)
511 IF (allocated(jpvt)) DEALLOCATE(jpvt)
512 IF (allocated(work)) DEALLOCATE(work)
513 IF (iflag.LT.0) GOTO 700
514 ENDIF
515 ENDIF
516 CALL zmumps_end_facto_slave( comm_load, ass_irecv,
517 & n, inode, fpere,
518 & root,
519 & myid, comm,
520 &
521 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
522 & iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la,
523 & ptrist, ptlust_s, ptrfac,
524 & ptrast, step, pimaster, pamaster,
525 & nstk_s, comp, iflag, ierror, perm,
526 & ipool, lpool, leaf, nbfin, slavef,
527 & opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw,
528 & intarr,dblarr,icntl,keep,keep8,dkeep,nd,frere_steps,
529 & lptrar, nelt, frtptr, frtelt,
530 & istep_to_iniv2, tab_pos_in_pere
531 & , lrgroups
532 & )
533 ENDIF
534 RETURN
535 700 CONTINUE
536 CALL zmumps_bdc_error( myid, slavef, comm, keep )
537 600 CONTINUE
538 IF (allocated(blr_u)) DEALLOCATE(blr_u)
539 IF (compress_cb) THEN
540 IF (allocated(blocklr)) DEALLOCATE(blocklr)
541 IF (allocated(rwork)) DEALLOCATE(rwork)
542 IF (allocated(tau)) DEALLOCATE(tau)
543 IF (allocated(jpvt)) DEALLOCATE(jpvt)
544 IF (allocated(work)) DEALLOCATE(work)
545 ENDIF
546 IF (allocated(m_array)) DEALLOCATE(m_array)
547 IF (dynamic_alloc) THEN
548 IF (allocated(udynamic)) DEALLOCATE(udynamic)
549 ENDIF
550 RETURN
#define mumps_abort
Definition VE_Metis.h:25
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM
Definition zgemm.f:187
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine mpi_unpack(inbuf, insize, position, outbuf, outcnt, datatype, comm, ierr)
Definition mpi.f:514
subroutine, public zmumps_buf_send_1int(i, dest, tag, comm, keep, ierr)
subroutine zmumps_dm_set_dynptr(cb_state, a, la, pamaster_or_ptrast, ixxd, ixxr, son_a, iachk, recsize)
subroutine zmumps_get_size_schur_in_front(n, ncb, size_schur, row_indices, perm, nvschur)
integer, save, private myid
Definition zmumps_load.F:57
double precision, save, private alpha
Definition zmumps_load.F:55
subroutine, public zmumps_load_mem_update(ssarbr, process_bande_arg, mem_value, new_lu, inc_mem_arg, keep, keep8, lrlus)
subroutine, public zmumps_load_update(check_flops, process_bande, inc_load, keep, keep8)
subroutine max_cluster(cut, cut_size, maxi_cluster)
Definition zlr_core.F:1304
subroutine, public zmumps_blr_save_m_array(iwhandler, m_array, info)
subroutine, public zmumps_blr_retrieve_nfs4father(iwhandler, nfs4father)
subroutine, public zmumps_blr_save_cb_lrb(iwhandler, cb_lrb)
subroutine, public zmumps_blr_dec_and_retrieve_l(iwhandler, ipanel, begs_blr_l, thelrbpanel)
subroutine, public zmumps_blr_retrieve_begs_blr_c(iwhandler, begs_blr_col, nb_panels)
subroutine, public zmumps_blr_try_free_panel(iwhandler, ipanel, keep8, k34)
subroutine dealloc_blr_panel(blr_panel, iend, keep8, k34, ibeg_in)
Definition zlr_type.F:56
int comp(int a, int b)
integer function mumps_procnode(procinfo_inode, k199)
subroutine mumps_set_ierror(size8, ierror)
subroutine zmumps_bdc_error(myid, slavef, comm, keep)
Definition zbcast_int.F:38
subroutine zmumps_get_size_needed(sizei_needed, sizer_needed, skip_top_stack, keep, keep8, n, iw, liw, a, la, lrlu, iptrlu, iwpos, iwposcb, ptrist, ptrast, step, pimaster, pamaster, lrlus, xsize, comp, acc_time, myid, slavef, procnode_steps, dad, iflag, ierror)
recursive subroutine zmumps_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 zmumps_mpi_unpack_lr(bufr, lbufr, lbufr_bytes, position, npiv, nelim, dir, blr_u, nb_block_u, begs_blr_u, keep8, comm, ierr, iflag, ierror)
recursive subroutine zmumps_end_facto_slave(comm_load, ass_irecv, n, inode, fpere, root, myid, comm bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, nstk, comp, iflag, ierror, perm, ipool, lpool, leaf, nbfin, slavef, 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, lrgroups)
recursive subroutine zmumps_try_recvtreat(comm_load, ass_irecv, blocking, set_irecv, message_received, msgsou, msgtag, status, 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 zmumps_blr_update_trailing_i(a, la, poselt, iflag, ierror, nfront, begs_blr_l, sizebegs_blr_l, begs_blr_u, sizebegs_blr_u, current_blr, blr_l, nb_blr_l, blr_u, nb_blr_u, nelim, lbandslave, ishift, niv, sym, midblk_compress, toleps, tol_opt, kpercent)
Definition ztools.F:1918
subroutine zmumps_compute_nbrowsinf(n, inode, ifath, keep, ioldps, hf, iw, liw, nrows, ncols, npiv, nelim, nfs4father, nbrowsinf)
Definition ztools.F:1584
subroutine zmumps_compress_cb_i(a_ptr, la_ptr, poselt, lda, begs_blr, sizebegs_blr, begs_blr_u, sizebegs_blr_u, nb_rows, nb_cols, nb_inasm, nrows, ncols, inode, iwhandler, sym, niv, iflag, ierror, toleps, tol_opt, kpercent, k489, cb_lrb, work, tau, jpvt, lwork, rwork, block, maxi_cluster, keep8, omp_num, nfs4father, npiv, nvschur_k253, keep, m_array, nelim, nbrowsinf)
Definition ztools.F:1957