16 & PROCNODE_STEPS, SLAVEF,
17 & IWPOS, IWPOSCB, IPTRLU, LRLU, LRLUS,
19 & PTRIST, PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S,
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 )
34 INTEGER LBUFR, LBUFR_BYTES
37 INTEGER(8) :: IPTRLU, LRLU, LRLUS, LA
38 INTEGER IWPOS, IWPOSCB
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 COMPLEX :: RHS_MUMPS(KEEP(255))
48 INTEGER NSTK_S( KEEP(28) )
49 INTEGER IFLAG, IERROR, COMM, COMM_LOAD
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,
58 INTEGER NOINT, INIV2, NCOL_EFF
59 DOUBLE PRECISION FLOP1
60 INTEGER NBROWS_ALREADY_SENT, NBROWS_PACKET
63 INCLUDE 'mumps_headers.h
'
64 COMPLEX, POINTER, DIMENSION(:) :: SON_A
65 INTEGER(8) :: DYN_SIZE
66 INTEGER MUMPS_TYPENODE
67 EXTERNAL MUMPS_TYPENODE
69 CALL MPI_UNPACK(BUFR, LBUFR_BYTES, POSITION,
70 & IFATH, 1, MPI_INTEGER
72 CALL MPI_UNPACK(BUFR, LBUFR_BYTES, POSITION,
73 & ISON , 1, MPI_INTEGER,
75 CALL MPI_UNPACK(BUFR, LBUFR_BYTES, POSITION,
77 & MPI_INTEGER, COMM, IERR )
78 CALL MPI_UNPACK(BUFR, LBUFR_BYTES, POSITION,
79 & NROW , 1, MPI_INTEGER
81 CALL MPI_UNPACK(BUFR, LBUFR_BYTES, POSITION,
82 & NCOL , 1, MPI_INTEGER
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,
89 & MPI_INTEGER, COMM, IERR)
90.NE..and..ne.
IF ( NSLAVES 0 KEEP(50)0 ) THEN
95 NOREAL_PACKET = NBROWS_PACKET * NCOL_EFF
96.EQ.
IF (NBROWS_ALREADY_SENT 0) THEN
97 NOINT = 6 + NROW + NCOL + NSLAVES + KEEP(IXSZ)
98 NOREAL= int(NROW,8) * int(NCOL_EFF,8)
99 CALL CMUMPS_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
106.LT.
IF ( IFLAG 0 ) THEN
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
114 IW( IWPOSCB + 2 + KEEP(IXSZ) ) = NELIM
115 IW( IWPOSCB + 3 + KEEP(IXSZ) ) = NROW
116.NE..and..ne.
IF ( NSLAVES 0 KEEP(50)0 ) THEN
117 IW( IWPOSCB + 4 + KEEP(IXSZ) ) = NROW - NCOL
118.GE.
IF ( NROW - NCOL 0 ) THEN
119 WRITE(*,*) 'error in process_maitre2:
',NROW,NCOL
123 IW( IWPOSCB + 4 + KEEP(IXSZ) ) = 0
125 IW( IWPOSCB + 5 + KEEP(IXSZ) ) = 1
126 IW( IWPOSCB + 6 + KEEP(IXSZ) ) = NSLAVES
127.GT.
IF (NSLAVES0) THEN
128 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
129 & IW( IWPOSCB + 7 + KEEP(IXSZ) ),
130 & NSLAVES, MPI_INTEGER, COMM, IERR )
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.GT.
IF ( NSLAVES 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
146.GT.
IF (NOREAL_PACKET0) THEN
147 CALL MUMPS_GETI8(DYN_SIZE, IW(PIMASTER(STEP(ISON))+XXD))
148.GT.
IF ( DYN_SIZE 0_8 ) THEN
149 CALL CMUMPS_DM_SET_PTR( PAMASTER(STEP(ISON)),
151 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
153 & int(NBROWS_ALREADY_SENT,8) * int(NCOL_EFF,8) ),
154 & NOREAL_PACKET, MPI_COMPLEX, COMM, IERR )
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_COMPLEX, COMM, IERR )
162.EQ.
IF ( NBROWS_ALREADY_SENT + NBROWS_PACKET NROW ) THEN
163 PERETYPE2 = ( MUMPS_TYPENODE(PROCNODE_STEPS(STEP(IFATH)),
165 NSTK_S( STEP(IFATH )) = NSTK_S( STEP(IFATH) ) - 1
166.EQ.
IF ( NSTK_S( STEP(IFATH)) 0 ) THEN
167 CALL CMUMPS_INSERT_POOL_N(N, IPOOL, LPOOL, PROCNODE_STEPS,
169 & KEEP(28), KEEP(76), KEEP(80), KEEP(47),
171.GE.
IF (KEEP(47) 3) THEN
172 CALL CMUMPS_LOAD_POOL_UPD_NEW_POOL(
174 & PROCNODE_STEPS, KEEP,KEEP8, SLAVEF, COMM_LOAD,
175 & MYID, STEP, N, ND, FILS )
177 CALL MUMPS_ESTIM_FLOPS( IFATH, N, PROCNODE_STEPS,
179 & FILS,FRERE, STEP, PIMASTER,
180 & KEEP(28), KEEP(50), KEEP(253),
181 & FLOP1,IW, LIW, KEEP(IXSZ) )
182.NE.
IF (IFATHKEEP(20))
183 & CALL CMUMPS_LOAD_UPDATE(1, .FALSE., FLOP1, KEEP,KEEP8)
subroutine cmumps_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)