OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sfac_process_master2.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 SUBROUTINE smumps_process_master2(MYID,BUFR, LBUFR,
15 & LBUFR_BYTES,
16 & PROCNODE_STEPS, SLAVEF,
17 & IWPOS, IWPOSCB, IPTRLU, LRLU, LRLUS,
18 & N, IW, LIW, A, LA,
19 & PTRIST, PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S,
20 & COMP,
21 & IFLAG, IERROR, COMM, COMM_LOAD,
22 & IPOOL, LPOOL, LEAF, KEEP, KEEP8, DKEEP,
23 & ND, FILS, DAD, FRERE, ITLOC, RHS_MUMPS,
24 & ISTEP_TO_INIV2, TAB_POS_IN_PERE )
25 USE smumps_load
27 IMPLICIT NONE
28 include 'mpif.h'
29 INTEGER IERR
30 INTEGER MYID
31 INTEGER KEEP(500)
32 INTEGER(8) KEEP8(150)
33 REAL DKEEP(230)
34 INTEGER LBUFR, LBUFR_BYTES
35 INTEGER BUFR( LBUFR )
36 INTEGER SLAVEF
37 INTEGER(8) :: IPTRLU, LRLU, LRLUS, LA
38 INTEGER IWPOS, IWPOSCB
39 INTEGER N, LIW
40 INTEGER IW( LIW )
41 REAL A( LA )
42 INTEGER(8) :: PTRAST(KEEP(28))
43 INTEGER(8) :: PAMASTER(KEEP(28))
44 INTEGER PTRIST(KEEP(28)), STEP(N), PIMASTER(KEEP(28))
45 INTEGER PROCNODE_STEPS( KEEP(28) ), ITLOC( N +KEEP(253) )
46 REAL :: RHS_MUMPS(KEEP(255))
47 INTEGER COMP
48 INTEGER NSTK_S( KEEP(28) )
49 INTEGER IFLAG, IERROR, COMM, COMM_LOAD
50 INTEGER LPOOL, LEAF
51 INTEGER IPOOL( LPOOL )
52 INTEGER ND(KEEP(28)), FILS( N ), DAD(KEEP(28)), FRERE(KEEP(28))
53 INTEGER ISTEP_TO_INIV2(KEEP(71)),
54 & tab_pos_in_pere(slavef+2,max(1,keep(56)))
55 INTEGER POSITION, IFATH, ISON, NROW, NCOL, NELIM,
56 & nslaves
57 INTEGER(8) :: NOREAL
58 INTEGER NOINT, INIV2, NCOL_EFF
59 DOUBLE PRECISION FLOP1
60 INTEGER NBROWS_ALREADY_SENT, NBROWS_PACKET
61 INTEGER NOREAL_PACKET
62 LOGICAL PERETYPE2
63 include 'mumps_headers.h'
64 REAL, POINTER, DIMENSION(:) :: SON_A
65 INTEGER(8) :: DYN_SIZE
66 INTEGER MUMPS_TYPENODE
67 EXTERNAL mumps_typenode
68 position = 0
69 CALL mpi_unpack(bufr, lbufr_bytes, position,
70 & ifath, 1, mpi_integer
71 & , comm, ierr)
72 CALL mpi_unpack(bufr, lbufr_bytes, position,
73 & ison , 1, mpi_integer,
74 & comm, ierr)
75 CALL mpi_unpack(bufr, lbufr_bytes, position,
76 & nslaves, 1,
77 & mpi_integer, comm, ierr )
78 CALL mpi_unpack(bufr, lbufr_bytes, position,
79 & nrow , 1, mpi_integer
80 & , comm, ierr)
81 CALL mpi_unpack(bufr, lbufr_bytes, position,
82 & ncol , 1, mpi_integer
83 & , comm, ierr)
84 CALL mpi_unpack(bufr, lbufr_bytes, position,
85 & nbrows_already_sent, 1,
86 & mpi_integer, comm, ierr)
87 CALL mpi_unpack(bufr, lbufr_bytes, position,
88 & nbrows_packet, 1,
89 & mpi_integer, comm, ierr)
90 IF ( nslaves .NE. 0 .and. keep(50).ne.0 ) THEN
91 ncol_eff = nrow
92 ELSE
93 ncol_eff = ncol
94 ENDIF
95 noreal_packet = nbrows_packet * ncol_eff
96 IF (nbrows_already_sent .EQ. 0) THEN
97 noint = 6 + nrow + ncol + nslaves + keep(ixsz)
98 noreal= int(nrow,8) * int(ncol_eff,8)
99 CALL smumps_alloc_cb(.false.,0_8,.false.,.false.,
100 & myid,n,keep,keep8,dkeep,iw,liw,a,la,
101 & lrlu, iptrlu,iwpos,iwposcb, slavef, procnode_steps, dad,
102 & ptrist,ptrast,step, pimaster, pamaster,
103 & noint, noreal, ison, s_notfree, .true.,
104 & comp, lrlus, keep8(67), iflag, ierror
105 & )
106 IF ( iflag .LT. 0 ) THEN
107 RETURN
108 ENDIF
109 pimaster(step( ison )) = iwposcb + 1
110 pamaster(step( ison )) = iptrlu + 1_8
111 iw( iwposcb + 1 + xxnbpr ) = 0
112 iw( iwposcb + 1 + keep(ixsz) ) = ncol
113 nelim = nrow
114 iw( iwposcb + 2 + keep(ixsz) ) = nelim
115 iw( iwposcb + 3 + keep(ixsz) ) = nrow
116 IF ( nslaves .NE. 0 .and. keep(50).ne.0 ) THEN
117 iw( iwposcb + 4 + keep(ixsz) ) = nrow - ncol
118 IF ( nrow - ncol .GE. 0 ) THEN
119 WRITE(*,*) 'Error in PROCESS_MAITRE2:',nrow,ncol
120 CALL mumps_abort()
121 END IF
122 ELSE
123 iw( iwposcb + 4 + keep(ixsz) ) = 0
124 END IF
125 iw( iwposcb + 5 + keep(ixsz) ) = 1
126 iw( iwposcb + 6 + keep(ixsz) ) = nslaves
127 IF (nslaves.GT.0) THEN
128 CALL mpi_unpack( bufr, lbufr_bytes, position,
129 & iw( iwposcb + 7 + keep(ixsz) ),
130 & nslaves, mpi_integer, comm, ierr )
131 ENDIF
132 CALL mpi_unpack(bufr, lbufr_bytes, position,
133 & iw(iwposcb + 7 + keep(ixsz) + nslaves),
134 & nrow, mpi_integer, comm, ierr)
135 CALL mpi_unpack(bufr, lbufr_bytes, position,
136 & iw(iwposcb + 7 + keep(ixsz) + nrow + nslaves),
137 & ncol, mpi_integer, comm, ierr)
138 IF ( nslaves .GT. 0 ) THEN
139 iniv2 = istep_to_iniv2( step(ison) )
140 CALL mpi_unpack(bufr, lbufr_bytes, position,
141 & tab_pos_in_pere(1,iniv2),
142 & nslaves+1, mpi_integer, comm, ierr)
143 tab_pos_in_pere(slavef+2,iniv2) = nslaves
144 ENDIF
145 ENDIF
146 IF (noreal_packet.GT.0) THEN
147 CALL mumps_geti8(dyn_size, iw(pimaster(step(ison))+xxd))
148 IF ( dyn_size .GT. 0_8 ) THEN
149 CALL smumps_dm_set_ptr( pamaster(step(ison)),
150 & dyn_size, son_a )
151 CALL mpi_unpack( bufr, lbufr_bytes, position,
152 & son_a( 1_8 +
153 & int(nbrows_already_sent,8) * int(ncol_eff,8) ),
154 & noreal_packet, mpi_real, comm, ierr )
155 ELSE
156 CALL mpi_unpack( bufr, lbufr_bytes, position,
157 & a( pamaster(step(ison)) +
158 & int(nbrows_already_sent,8) * int(ncol_eff,8) ),
159 & noreal_packet, mpi_real, comm, ierr )
160 ENDIF
161 ENDIF
162 IF ( nbrows_already_sent + nbrows_packet .EQ. nrow ) THEN
163 peretype2 = ( mumps_typenode(procnode_steps(step(ifath)),
164 & keep(199)) .EQ. 2 )
165 nstk_s( step(ifath )) = nstk_s( step(ifath) ) - 1
166 IF ( nstk_s( step(ifath)) .EQ. 0 ) THEN
167 CALL smumps_insert_pool_n(n, ipool, lpool, procnode_steps,
168 & slavef, keep(199),
169 & keep(28), keep(76), keep(80), keep(47),
170 & step, ifath )
171 IF (keep(47) .GE. 3) THEN
173 & ipool, lpool,
174 & procnode_steps, keep,keep8, slavef, comm_load,
175 & myid, step, n, nd, fils )
176 ENDIF
177 CALL mumps_estim_flops( ifath, n, procnode_steps,
178 & keep(199), nd,
179 & fils,frere, step, pimaster,
180 & keep(28), keep(50), keep(253),
181 & flop1,iw, liw, keep(ixsz) )
182 IF (ifath.NE.keep(20))
183 & CALL smumps_load_update(1, .false., flop1, keep,keep8)
184 END IF
185 ENDIF
186 RETURN
187 END SUBROUTINE smumps_process_master2
#define mumps_abort
Definition VE_Metis.h:25
subroutine mumps_estim_flops(inode, n, procnode_steps, keep199, nd, fils, frere_steps, step, pimaster, keep28, keep50, keep253, flop1, iw, liw, xsize)
Definition estim_flops.F: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 smumps_dm_set_ptr(address, sizfr8, cbptr)
subroutine, public smumps_load_pool_upd_new_pool(pool, lpool, procnode, keep, keep8, slavef, comm, myid, step, n, nd, fils)
subroutine, public smumps_load_update(check_flops, process_bande, inc_load, keep, keep8)
subroutine smumps_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)
subroutine smumps_process_master2(myid, bufr, lbufr, lbufr_bytes, procnode_steps, slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, comm_load, ipool, lpool, leaf, keep, keep8, dkeep, nd, fils, dad, frere, itloc, rhs_mumps, istep_to_iniv2, tab_pos_in_pere)
subroutine smumps_insert_pool_n(n, pool, lpool, procnode, slavef, keep199, k28, k76, k80, k47, step, inode)
subroutine mumps_geti8(i8, int_array)