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

Go to the source code of this file.

Functions/Subroutines

subroutine dmumps_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)

Function/Subroutine Documentation

◆ dmumps_process_master2()

subroutine dmumps_process_master2 ( integer myid,
integer, dimension( lbufr ) bufr,
integer lbufr,
integer lbufr_bytes,
integer, dimension( keep(28) ) procnode_steps,
integer slavef,
integer iwpos,
integer iwposcb,
integer(8) iptrlu,
integer(8) lrlu,
integer(8) lrlus,
integer n,
integer, dimension( liw ) iw,
integer liw,
double precision, dimension( la ) a,
integer(8) la,
integer, dimension(keep(28)) ptrist,
integer(8), dimension(keep(28)) ptrast,
integer, dimension(n) step,
integer, dimension(keep(28)) pimaster,
integer(8), dimension(keep(28)) pamaster,
integer, dimension( keep(28) ) nstk_s,
integer comp,
integer iflag,
integer ierror,
integer comm,
integer comm_load,
integer, dimension( lpool ) ipool,
integer lpool,
integer leaf,
integer, dimension(500) keep,
integer(8), dimension(150) keep8,
double precision, dimension(230) dkeep,
integer, dimension(keep(28)) nd,
integer, dimension( n ) fils,
integer, dimension(keep(28)) dad,
integer, dimension(keep(28)) frere,
integer, dimension( n +keep(253) ) itloc,
double precision, dimension(keep(255)) rhs_mumps,
integer, dimension(keep(71)) istep_to_iniv2,
integer, dimension(slavef+2,max(1,keep(56))) tab_pos_in_pere )

Definition at line 14 of file dfac_process_master2.F.

25 USE dmumps_load
27 IMPLICIT NONE
28 include 'mpif.h'
29 INTEGER IERR
30 INTEGER MYID
31 INTEGER KEEP(500)
32 INTEGER(8) KEEP8(150)
33 DOUBLE PRECISION 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 DOUBLE PRECISION 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 DOUBLE PRECISION :: 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 DOUBLE PRECISION, 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 dmumps_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 dmumps_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_double_precision, 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_double_precision, 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 dmumps_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 dmumps_load_update(1, .false., flop1, keep,keep8)
184 END IF
185 ENDIF
186 RETURN
#define mumps_abort
Definition VE_Metis.h:25
subroutine dmumps_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 dmumps_insert_pool_n(n, pool, lpool, procnode, slavef, keep199, k28, k76, k80, k47, step, inode)
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
subroutine mpi_unpack(inbuf, insize, position, outbuf, outcnt, datatype, comm, ierr)
Definition mpi.f:514
subroutine dmumps_dm_set_ptr(address, sizfr8, cbptr)
subroutine, public dmumps_load_pool_upd_new_pool(pool, lpool, procnode, keep, keep8, slavef, comm, myid, step, n, nd, fils)
integer, save, private myid
Definition dmumps_load.F:57
subroutine, public dmumps_load_update(check_flops, process_bande, inc_load, keep, keep8)
int comp(int a, int b)
integer function mumps_typenode(procinfo_inode, k199)
subroutine mumps_geti8(i8, int_array)