OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sfac_process_blfac_slave.F
Go to the documentation of this file.
1C
2C This file is part of MUMPS 5.5.1, released
3C on Tue Jul 12 13:17:24 UTC 2022
4C
5C
6C Copyright 1991-2022 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria,
7C Mumps Technologies, University of Bordeaux.
8C
9C This version of MUMPS is provided to you free of charge. It is
10C released under the CeCILL-C license
11C (see doc/CeCILL-C_V1-en.txt, doc/CeCILL-C_V1-fr.txt, and
12C https://cecill.info/licences/Licence_CeCILL-C_V1-en.html)
13C
14 RECURSIVE SUBROUTINE smumps_process_blfac_slave(
15 & COMM_LOAD, ASS_IRECV,
16 & BUFR, LBUFR,
17 & LBUFR_BYTES, PROCNODE_STEPS, MSGSOU,
18 & SLAVEF, IWPOS, IWPOSCB, IPTRLU, LRLU, LRLUS, N, IW, LIW,
19 & A, LA, PTRIST, PTRAST, NSTK_S, PERM,
20 & COMP, STEP, PIMASTER, PAMASTER, POSFAC,
21 & MYID, COMM, IFLAG, IERROR, NBFIN,
22 &
23 & PTLUST_S, PTRFAC, root, OPASSW, OPELIW,
24 & ITLOC, RHS_MUMPS, FILS, DAD,
25 & PTRARW, PTRAIW, INTARR, DBLARR,
26 & ICNTL,KEEP,KEEP8,DKEEP,IPOOL, LPOOL, LEAF, ND, FRERE_STEPS,
27 & LPTRAR, NELT, FRTPTR, FRTELT,
28 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
29 & , LRGROUPS
30 & )
31 USE smumps_buf
32 USE smumps_load
37 USE smumps_struc_def, ONLY : smumps_root_struc
40#if defined(BLR_MT)
41!$ USE OMP_LIB
42#endif
43 IMPLICIT NONE
44 TYPE (smumps_root_struc) :: root
45 INTEGER icntl( 60 ), keep( 500 )
46 INTEGER(8) keep8(150)
47 REAL 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 REAL 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 REAL :: rhs_mumps(keep(255))
73 INTEGER nd( keep(28) ), frere_steps( keep(28) )
74 DOUBLE PRECISION opassw, OPELIW
75 DOUBLE PRECISION flop1
76 REAL 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 REAL, 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 REAL, ALLOCATABLE, DIMENSION(:) :: work, tau
110 INTEGER, ALLOCATABLE, DIMENSION(:) :: jpvt
111 REAL, ALLOCATABLE, DIMENSION(:,:) :: blocklr
112 REAL,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 REAL, ALLOCATABLE, DIMENSION(:) :: m_array
119 REAL, ALLOCATABLE, DIMENSION(:) :: udynamic
120 REAL one,alpha
121 parameter(one = 1.0e0, alpha=-1.0e0)
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 smumps_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 smumps_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_real,
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 smumps_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 smumps_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 smumps_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 smumps_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 smumps_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 smumps_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 smumps_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 sgemm( '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 sgemm( '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 smumps_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 smumps_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 smumps_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 smumps_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 smumps_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 smumps_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 smumps_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 smumps_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 smumps_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
551 END SUBROUTINE smumps_process_blfac_slave
#define mumps_abort
Definition VE_Metis.h:25
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM
Definition sgemm.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 smumps_buf_send_1int(i, dest, tag, comm, keep, ierr)
subroutine smumps_dm_set_dynptr(cb_state, a, la, pamaster_or_ptrast, ixxd, ixxr, son_a, iachk, recsize)
subroutine smumps_get_size_schur_in_front(n, ncb, size_schur, row_indices, perm, nvschur)
double precision, save, private alpha
Definition smumps_load.F:55
subroutine, public smumps_load_mem_update(ssarbr, process_bande_arg, mem_value, new_lu, inc_mem_arg, keep, keep8, lrlus)
integer, save, private myid
Definition smumps_load.F:57
subroutine, public smumps_load_update(check_flops, process_bande, inc_load, keep, keep8)
subroutine max_cluster(cut, cut_size, maxi_cluster)
Definition slr_core.F:1304
subroutine, public smumps_blr_retrieve_begs_blr_c(iwhandler, begs_blr_col, nb_panels)
subroutine, public smumps_blr_save_cb_lrb(iwhandler, cb_lrb)
subroutine, public smumps_blr_try_free_panel(iwhandler, ipanel, keep8, k34)
subroutine, public smumps_blr_retrieve_nfs4father(iwhandler, nfs4father)
subroutine, public smumps_blr_dec_and_retrieve_l(iwhandler, ipanel, begs_blr_l, thelrbpanel)
subroutine dealloc_blr_panel(blr_panel, iend, keep8, k34, ibeg_in)
Definition slr_type.F:56
subroutine smumps_bdc_error(myid, slavef, comm, keep)
Definition sbcast_int.F:38
int comp(int a, int b)
subroutine smumps_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 smumps_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)
recursive subroutine smumps_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)
subroutine smumps_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 smumps_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 smumps_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 smumps_compute_nbrowsinf(n, inode, ifath, keep, ioldps, hf, iw, liw, nrows, ncols, npiv, nelim, nfs4father, nbrowsinf)
Definition stools.F:1584
subroutine smumps_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 stools.F:1957
subroutine smumps_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 stools.F:1918
integer function mumps_procnode(procinfo_inode, k199)
subroutine mumps_set_ierror(size8, ierror)