OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
dfac_process_root2son.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
15 & dmumps_process_root2son( comm_load, ass_irecv,
16 & inode, nelim_root, root,
17 &
18 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
19 & iwpos, iwposcb, iptrlu,
20 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
21 & ptlust_s, ptrfac,
22 & ptrast, step, pimaster, pamaster, nstk_s, comp,
23 & iflag, ierror, comm,
24 & perm, ipool, lpool, leaf, nbfin, myid, slavef,
25 &
26 & opassw, opeliw, itloc, rhs_mumps,
27 & fils, dad, ptrarw, ptraiw,
28 & intarr,dblarr,icntl,keep,keep8,dkeep,nd,frere,
29 & lptrar, nelt, frtptr, frtelt,
30 & istep_to_iniv2, tab_pos_in_pere
31 & , lrgroups
32 & )
33 USE dmumps_struc_def, ONLY : dmumps_root_struc
34 IMPLICIT NONE
35 include 'mpif.h'
36 TYPE (dmumps_root_struc) :: root
37 INTEGER keep(500), icntl( 60 )
38 INTEGER(8) keep8(150)
39 DOUBLE PRECISION dkeep(230)
40 INTEGER comm_load, ass_irecv
41 INTEGER inode, nelim_root
42 INTEGER lbufr, lbufr_bytes
43 INTEGER bufr( lbufr )
44 INTEGER(8) :: la, posfac, IPTRLU, lrlu, lrlus
45 INTEGER iwpos, iwposcb
46 INTEGER n, liw
47 INTEGER iw( liw )
48 DOUBLE PRECISION a( la )
49 INTEGER, intent(in) :: LRGROUPS(n)
50 INTEGER(8) :: ptrast(keep(28))
51 INTEGER(8) :: ptrfac(keep(28))
52 INTEGER(8) :: pamaster(keep(28))
53 INTEGER ptrist(keep(28)), ptlust_s(keep(28))
54 INTEGER step(n), pimaster(KEEP(28))
55 INTEGER comp
56 INTEGER nstk_s( keep(28) ), procnode_steps( keep(28) )
57 INTEGER perm(n)
58 INTEGER iflag, ierror, comm
59 INTEGER lpool, leaf
60 INTEGER ipool( lpool )
61 INTEGER nelt, lptrar
62 INTEGER frtptr( n+1 ), frtelt( nelt )
63 INTEGER myid, slavef, nbfin
64 DOUBLE PRECISION opassw, opeliw
65 INTEGER itloc( n + keep(253) ), fils( n ), dad(keep(28))
66 DOUBLE PRECISION :: rhs_mumps(keep(255))
67 INTEGER(8), INTENT(IN) :: ptrarw( lptrar ), ptraiw( lptrar )
68 INTEGER nd( keep(28) ), frere( keep(28) )
69 INTEGER intarr(keep8(27))
70 DOUBLE PRECISION dblarr(keep8(26))
71 INTEGER istep_to_iniv2(keep(71)),
72 & tab_pos_in_pere(slavef+2,max(1,keep(56)))
73 include 'mumps_tags.h'
74 include 'mumps_headers.h'
75 INTEGER i, lcont, NCOL_TO_SEND, lda
76 INTEGER(8) :: SHIFT_VAL_SON, poselt
77 INTEGER fpere, ioldps, NFRONT, npiv, nass, nslaves,
78 & h_inode, nelim, nbcol, list_nelim_row,
79 & list_nelim_col, nelim_local, type_son,
80 & nrow, ncol, nbrow, shift_list_row_son,
81 & shift_list_col_son, ldafs, ierr,
82 & ison, pdest_master_ison
83 INTEGER :: status(mpi_status_size)
84 LOGICAL blocking, set_irecv, message_received
85 INTEGER msgsou, msgtag
86 LOGICAL transpose_asm
89 fpere = keep(38)
90 type_son = mumps_typenode(procnode_steps(step(inode)),keep(199))
91 IF ( mumps_procnode( procnode_steps(step(inode)),
92 & keep(199) ).EQ.myid) THEN
93 ioldps = ptlust_s(step(inode))
94 nfront = iw(ioldps+keep(ixsz))
95 npiv = iw(ioldps+1+keep(ixsz))
96 nass = iabs(iw(ioldps + 2+keep(ixsz)))
97 nslaves = iw(ioldps+5+keep(ixsz))
98 h_inode = 6 + nslaves + keep(ixsz)
99 nelim = nass - npiv
100 nbcol = nfront - npiv
101 list_nelim_row = ioldps + h_inode + npiv
102 list_nelim_col = list_nelim_row + nfront
103 IF (nelim.LE.0) THEN
104 write(6,*) ' ERROR 1 in DMUMPS_PROCESS_ROOT2SON ', nelim
105 write(6,*) myid,':Process root2son: INODE=',inode,
106 & 'Header=',iw(ptlust_s(step(inode)):ptlust_s(step(inode))
107 & +5+keep(ixsz))
108 CALL mumps_abort()
109 ENDIF
110 nelim_local = nelim_root
111 DO i=1, nelim
112 root%RG2L_ROW(iw(list_nelim_row)) = nelim_local
113 root%RG2L_COL(iw(list_nelim_col)) = nelim_local
114 nelim_local = nelim_local + 1
115 list_nelim_row = list_nelim_row + 1
116 list_nelim_col = list_nelim_col + 1
117 ENDDO
118 nbrow = nfront - npiv
119 nrow = nelim
120 IF ( keep( 50 ) .eq. 0 ) THEN
121 ncol = nfront - npiv
122 ELSE
123 ncol = nelim
124 END IF
125 shift_list_row_son = h_inode + npiv
126 shift_list_col_son = h_inode + nfront + npiv
127 IF ( keep(50).eq.0 .OR. type_son .eq. 1 ) THEN
128 ldafs = nfront
129 ELSE
130 ldafs = nass
131 END IF
132 shift_val_son = int(npiv,8) * int(ldafs,8) + int(npiv,8)
133 CALL dmumps_build_and_send_cb_root( comm_load,
134 & ass_irecv,
135 & n, inode, fpere,
136 & ptlust_s(1), ptrast(1),
137 & root, nrow, ncol, shift_list_row_son,
138 & shift_list_col_son , shift_val_son, ldafs,
139 & root_non_elim_cb, myid, comm,
140 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
141 & iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la,
142 & ptrist, ptlust_s(1), ptrfac(1), ptrast(1),
143 & step, pimaster, pamaster,
144 & nstk_s, comp, iflag, ierror, perm,
145 & ipool, lpool, leaf, nbfin, slavef,
146 & opassw, opeliw, itloc, rhs_mumps,
147 & fils, dad, ptrarw, ptraiw,
148 & intarr,dblarr,icntl,keep,keep8,dkeep,.false.,nd,frere,
149 & lptrar, nelt, frtptr, frtelt,
150 & istep_to_iniv2, tab_pos_in_pere
151 & , lrgroups
152 & )
153 IF (iflag.LT.0 ) RETURN
154 IF (type_son.EQ.1) THEN
155 nrow = nfront - nass
156 ncol = nelim
157 shift_list_row_son = h_inode + nass
158 shift_list_col_son = h_inode + nfront + npiv
159 shift_val_son = int(nass,8) * int(nfront,8) + int(npiv,8)
160 IF ( keep( 50 ) .eq. 0 ) THEN
161 transpose_asm = .false.
162 ELSE
163 transpose_asm = .true.
164 END IF
165 CALL dmumps_build_and_send_cb_root( comm_load, ass_irecv,
166 & n, inode, fpere,
167 & ptlust_s, ptrast,
168 & root, nrow, ncol, shift_list_row_son,
169 & shift_list_col_son , shift_val_son, nfront,
170 & root_non_elim_cb, myid, comm,
171 &
172 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
173 & iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la,
174 & ptrist, ptlust_s, ptrfac,
175 & ptrast, step, pimaster, pamaster,
176 & nstk_s, comp, iflag, ierror, perm,
177 & ipool, lpool, leaf, nbfin, slavef,
178 & opassw, opeliw, itloc, rhs_mumps,
179 & fils, dad, ptrarw, ptraiw,
180 & intarr,dblarr,icntl,keep,keep8,dkeep,
181 & transpose_asm,nd,frere,
182 & lptrar, nelt, frtptr, frtelt,
183 & istep_to_iniv2, tab_pos_in_pere, lrgroups )
184 IF (iflag.LT.0 ) RETURN
185 ENDIF
186 ioldps = ptlust_s(step(inode))
187 poselt = ptrast(step(inode))
188 iw(ioldps + 4+keep(ixsz)) = step(inode)
189 ptrfac(step(inode))=poselt
190 IF ( type_son .eq. 1 ) THEN
191 nbrow = nfront - npiv
192 ELSE
193 nbrow = nelim
194 END IF
195 IF ( type_son .eq. 1 .OR. keep(50).EQ.0) THEN
196 lda = nfront
197 ELSE
198 lda = npiv+nbrow
199 ENDIF
200 CALL dmumps_compact_factors(a(poselt), lda,
201 & npiv, nbrow, keep,
202 & int(lda,8)*int(nbrow+npiv,8), iw(ioldps+h_inode+nfront))
203 iw(ioldps + keep(ixsz)) = nbcol
204 iw(ioldps + 1 +keep(ixsz)) = nass - npiv
205 IF (type_son.EQ.2) THEN
206 iw(ioldps + 2 +keep(ixsz)) = nass
207 ELSE
208 iw(ioldps + 2 +keep(ixsz)) = nfront
209 ENDIF
210 iw(ioldps + 3 +keep(ixsz)) = npiv
211 CALL dmumps_compress_lu(0_8,myid,n,ioldps,type_son,iw,liw,
212 & a, la, posfac, lrlu, lrlus,
213 & iwpos, ptrast,ptrfac,step, keep,keep8, .false.,inode,ierr
214 & , lrgroups, nass
215 & )
216 IF(ierr.LT.0)THEN
217 iflag=ierr
218 ierror=0
219 RETURN
220 ENDIF
221 ELSE
222 ison = inode
223 pdest_master_ison =
224 & mumps_procnode( procnode_steps(step(ison)), keep(199) )
225 IF ( ptrist(step(ison)) .EQ. 0) THEN
226 CALL dmumps_treat_descband( ison, comm_load,
227 & ass_irecv,
228 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
229 & iwpos, iwposcb, iptrlu,
230 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
231 & ptlust_s, ptrfac,
232 & ptrast, step, pimaster, pamaster, nstk_s, comp,
233 & iflag, ierror, comm,
234 & perm, ipool, lpool, leaf, nbfin, myid, slavef,
235 &
236 & root, opassw, opeliw, itloc, rhs_mumps,
237 & fils, dad, ptrarw, ptraiw,
238 & intarr, dblarr,icntl,keep,keep8,dkeep,nd,frere,lptrar,
239 & nelt, frtptr, frtelt,
240 & istep_to_iniv2, tab_pos_in_pere, .true.
241 & , lrgroups
242 & )
243 IF ( iflag .LT. 0 ) RETURN
244 ENDIF
245 DO WHILE (
246 & ( iw( ptrist(step(ison)) + 1 +keep(ixsz)) .NE.
247 & iw( ptrist(step(ison)) + 3 +keep(ixsz)) ) .OR.
248 & ( keep(50) .NE. 0 .AND.
249 & iw( ptrist(step(ison)) + 6 +keep(ixsz)) .NE. 0 ) )
250 IF ( keep(50).eq.0) THEN
251 msgsou = pdest_master_ison
252 msgtag = bloc_facto
253 ELSE
254 IF ( iw( ptrist(step(ison)) + 1 +keep(ixsz)) .NE.
255 & iw( ptrist(step(ison)) + 3 +keep(ixsz)) ) THEN
256 msgsou = pdest_master_ison
257 msgtag = bloc_facto_sym
258 ELSE
259 msgsou = mpi_any_source
260 msgtag = bloc_facto_sym_slave
261 END IF
262 END IF
263 blocking = .true.
264 set_irecv = .false.
265 message_received = .false.
266 CALL dmumps_try_recvtreat( comm_load, ass_irecv,
267 & blocking, set_irecv, message_received,
268 & msgsou, msgtag,
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, lptrar,
281 & nelt, frtptr, frtelt,
282 & istep_to_iniv2, tab_pos_in_pere, .true.
283 & , lrgroups
284 & )
285 IF ( iflag .LT. 0 ) RETURN
286 END DO
287 ioldps = ptrist(step(inode))
288 lcont = iw(ioldps+keep(ixsz))
289 nrow = iw(ioldps+2+keep(ixsz))
290 npiv = iw(ioldps+3+keep(ixsz))
291 nass = iw(ioldps+4+keep(ixsz))
292 nelim = nass-npiv
293 IF (nelim.LE.0) THEN
294 write(6,*) myid,': INODE,LCONT, NROW, NPIV, NASS, NELIM=',
295 & inode,lcont, nrow, npiv, nass, nelim
296 write(6,*) myid,': IOLDPS=',ioldps
297 write(6,*) myid,': ERROR 2 in DMUMPS_PROCESS_ROOT2SON '
298 CALL mumps_abort()
299 ENDIF
300 nslaves= iw(ioldps+5+keep(ixsz))
301 h_inode = 6 + nslaves + keep(ixsz)
302 list_nelim_col = ioldps + h_inode + nrow + npiv
303 nelim_local = nelim_root
304 DO i = 1, nelim
305 root%RG2L_COL(iw(list_nelim_col)) = nelim_local
306 root%RG2L_ROW(iw(list_nelim_col)) = nelim_local
307 nelim_local = nelim_local + 1
308 list_nelim_col = list_nelim_col + 1
309 ENDDO
310 shift_list_row_son = 6 + iw(ioldps+5+keep(ixsz)) + keep(ixsz)
311 shift_list_col_son = shift_list_row_son + nrow + npiv
312 ncol_to_send = nelim
313 lda = -9999
314 shift_val_son = -9999_8
315 IF ( keep( 50 ) .eq. 0 ) THEN
316 transpose_asm = .false.
317 ELSE
318 transpose_asm = .true.
319 END IF
320 CALL dmumps_build_and_send_cb_root( comm_load, ass_irecv,
321 & n, inode, fpere,
322 & ptrist, ptrast,
323 & root, nrow, ncol_to_send, shift_list_row_son,
324 & shift_list_col_son , shift_val_son, lda,
325 & root_non_elim_cb, myid, comm,
326 &
327 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
328 & iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la,
329 & ptrist, ptlust_s, ptrfac,
330 & ptrast, step, pimaster, pamaster,
331 & nstk_s, comp, iflag, ierror, perm,
332 & ipool, lpool, leaf, nbfin, slavef,
333 & opassw, opeliw, itloc, rhs_mumps,
334 & fils, dad, ptrarw, ptraiw,
335 & intarr,dblarr,icntl,keep,keep8,dkeep,transpose_asm,
336 & nd, frere, lptrar, nelt, frtptr, frtelt,
337 & istep_to_iniv2, tab_pos_in_pere, lrgroups)
338 IF (iflag.LT.0 ) RETURN
339 IF (keep(214).EQ.2) THEN
340 CALL dmumps_stack_band( n, inode,
341 & ptrist, ptrast, ptlust_s, ptrfac, iw, liw, a, la,
342 & lrlu, lrlus, iwpos, iwposcb, posfac, comp,
343 & iptrlu, opeliw, step, pimaster, pamaster,
344 & iflag, ierror, slavef, procnode_steps, dad, myid, comm,
345 & keep, keep8, dkeep,type_son
346 & )
347 ENDIF
348 IF (iflag.LT.0) THEN
349 CALL dmumps_bdc_error( myid, slavef, comm, keep )
350 ENDIF
351 ENDIF
352 RETURN
353 END SUBROUTINE dmumps_process_root2son
#define mumps_abort
Definition VE_Metis.h:25
subroutine dmumps_bdc_error(myid, slavef, comm, keep)
Definition dbcast_int.F:38
subroutine dmumps_compact_factors(a, lda, npiv, nbrow, keep, sizea, iw)
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)
recursive subroutine dmumps_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)
recursive subroutine dmumps_process_root2son(comm_load, ass_irecv, inode, nelim_root, root, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, perm, ipool, lpool, leaf, nbfin, myid, 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)
subroutine dmumps_stack_band(n, ison, ptrist, ptrast, ptlust_s, ptrfac, iw, liw, a, la, lrlu, lrlus, iwpos, iwposcb, posfac, comp, iptrlu, opeliw, step, pimaster, pamaster, iflag, ierror, slavef, procnode_steps, dad, myid, comm, keep, keep8, dkeep, type_son)
Definition dtools.F:219
subroutine dmumps_compress_lu(size_inplace, myid, n, ioldps, type, iw, liw, a, la, posfac, lrlu, lrlus, iwpos, ptrast, ptrfac, step, keep, keep8, ssarbr, inode, ierr, lrgroups, nass)
Definition dtools.F:20
recursive subroutine dmumps_build_and_send_cb_root(comm_load, ass_irecv, n, ison, iroot, ptri, ptrr, root, nbrow, nbcol, shift_list_row_son, shift_list_col_son, shift_val_son_arg, lda_arg, tag, 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, transpose_asm, nd, frere, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)
Definition dtype3_root.F:84
#define max(a, b)
Definition macros.h:21
int comp(int a, int b)
integer function mumps_typenode(procinfo_inode, k199)
integer function mumps_procnode(procinfo_inode, k199)