180{
181
182
183
184
185
186 unsigned long numberOfEndFill = 0;
187
188 G4bool verbose = IsVerbose(kVL2);
189
190 while ( true ) {
192
193
194
195 int probe_src;
197 G4cerr << "!!! wait_buffer() failed." << std::endl;
198 return EXIT_FAILURE;
199 }
200
201 tools::uint32 protocol;
202 if ( !
fImpi->unpack(protocol)) {
203 G4cerr << "unpack(protocol) failed."<< G4endl;
204 return false;
205 }
206
207 if ( protocol == tools::wroot::mpi_protocol_basket() ) {
208
209
210
211
212 tools::uint32 ntupleId;
213 if ( !
fImpi->unpack(ntupleId) ) {
214 G4cerr << "unpack(ntuple_id) failed."<< std::endl;
215 return false;
216 }
217
218 if ( ntupleId >= fNtupleVector.size() ) {
219 std::cerr << "!!! unknown ntupleId " << ntupleId << std::endl;
220 return false;
221 }
222
223
224 auto mainNtuple = fNtupleVector[ntupleId];
225
226
227 if ( ! mainNtuple->mpi_add_basket(*
fImpi)) {
228 std::cerr << "mainNtuple->mpi_add_basket() failed." << std::endl;
229 return EXIT_FAILURE;
230 }
231 }
232 else if ( protocol == tools::wroot::mpi_protocol_baskets() ) {
233
234
235
236
237
238 tools::uint32 ntupleId;
239 if ( !
fImpi->unpack(ntupleId) ) {
240 G4cerr << "unpack(ntuple_id) failed."<< std::endl;
241 return false;
242 }
243
244 if ( ntupleId >= fNtupleVector.size() ) {
245 std::cerr << "!!! unknown ntupleId " << ntupleId << std::endl;
246 return false;
247 }
248
249
250 auto mainNtuple = fNtupleVector[ntupleId];
251
252
253 if ( ! mainNtuple->mpi_add_baskets(*
fImpi)) {
254 std::cerr << "mainNtuple->mpi_add_baskets() failed." << std::endl;
255 return EXIT_FAILURE;
256 }
257 }
258 else if ( protocol==tools::wroot::mpi_protocol_end_fill() ) {
259
260
261
262
263 tools::uint32 ntupleId;
264 if ( !
fImpi->unpack(ntupleId) ) {
265 G4cerr << "unpack(ntuple_id) failed."<< std::endl;
266 return false;
267 }
268
269 if ( ntupleId >= fNtupleVector.size() ) {
270 std::cerr << "!!! unknown ntupleId " << ntupleId << std::endl;
271 return false;
272 }
273
274
275 auto mainNtuple = fNtupleVector[ntupleId];
276
277
278 if ( ! mainNtuple->mpi_end_fill(*
fImpi) ) {
279 G4cerr << "main_ntuple->mpi_end_fill() failed." << std::endl;
280 return false;
281 }
282
283 numberOfEndFill++;
284
285 if ( numberOfEndFill ==
fSlaveRanks.size() )
break;
286 }
287 else {
288 G4cerr << "unknown protocol " << protocol << G4endl;
289 return false;
290 }
291 }
292
293 return true;
294}