86#ifdef __VERBOSE_PARALLEL
91 for (
int i = 1; i <= ndofman; i++ ) {
95 for (
Dof *dof: *dman ) {
96 if ( dof->isPrimaryDof() ) {
97 if ( dof->giveEquationNumber() ) {
107 int minrank = myrank;
108 for ( j = 1; j <= n; j++ ) {
109 minrank =
min( minrank, plist->
at(j) );
111 if ( minrank == myrank ) {
112 for (
Dof *dof: *dman ) {
113 if ( dof->isPrimaryDof() ) {
114 if ( dof->giveEquationNumber() ) {
123 for (
auto &dof: *dman ) {
124 if ( dof->isPrimaryDof() ) {
125 if ( dof->giveEquationNumber(n) ) {
135 MPI_Allgather(&
l_neqs, 1, MPI_INT, leqs, 1, MPI_INT, MPI_COMM_WORLD);
138 for (
int j = 0; j < myrank; j++ ) {
139 offset += leqs [ j ];
153 IntArray sizeToSend(nproc), sizeToRecv(nproc), nrecToReceive(nproc);
154#ifdef __VERBOSE_PARALLEL
158 for (
int i = 1; i <= ndofman; i++ ) {
164 int minrank = myrank;
165 for (
int j = 1; j <= psize; j++ ) {
166 minrank =
min( minrank, plist->
at(j) );
169 if ( minrank == myrank ) {
170 for (
int j = 1; j <= psize; j++ ) {
171#ifdef __VERBOSE_PARALLEL
172 nrecToSend( plist->
at(j) )++;
174 sizeToSend( plist->
at(j) ) += ( 1 + n );
177 nrecToReceive(minrank)++;
178 sizeToRecv(minrank) += ( 1 + n );
183#ifdef __VERBOSE_PARALLEL
184 for (
int i = 0; i < nproc; i++ ) {
185 OOFEM_LOG_INFO(
"[%d] Record Statistics: Sending %d Receiving %d to %d\n",
186 myrank, nrecToSend(i), nrecToReceive(i), i);
192 std :: map< int, int >globloc;
195 for (
int i = 1; i <= ndofman; i++ ) {
203 int minrank = myrank;
204 for (
int j = 1; j <= psize; j++ ) {
205 minrank =
min( minrank, plist->
at(j) );
208 if ( minrank == myrank ) {
209 for (
Dof *dof: *dman ) {
210 if ( dof->isPrimaryDof() ) {
211 int eq = dof->giveEquationNumber(n);
222 for (
auto &dof: *dman ) {
223 if ( dof->isPrimaryDof() ) {
224 int eq = dof->giveEquationNumber(n);
243 for (
int p = 0; p < nproc; p++ ) {
245 buffs [ p ]->
resize( buffs [ p ]->givePackSizeOfInt(1) * sizeToSend(p) );
248 OOFEM_LOG_INFO(
"[%d]Natural2GlobalOrdering :: init: Send buffer[%d] size %d\n",
249 myrank, p, sizeToSend(p) );
254 for (
int i = 1; i <= ndofman; i++ ) {
259 int minrank = myrank;
260 for (
int j = 1; j <= psize; j++ ) {
261 minrank =
min( minrank, plist->
at(j) );
264 if ( minrank == myrank ) {
265 for (
int j = 1; j <= psize; j++ ) {
266 int p = plist->
at(j);
272 OOFEM_LOG_INFO(
"[%d]Natural2GlobalOrdering :: init: Sending localShared node %d[%d] to proc %d\n",
276 for (
Dof *dof: *dman ) {
277 if ( dof->isPrimaryDof() ) {
278 int eq = dof->giveEquationNumber(n);
293 for (
int p = 0; p < nproc; p++ ) {
295 buffs [ p ]->
iSend(p, 999);
301 for (
int p = 0; p < nproc; p++ ) {
305 for (
int i = 1; i <= ndofman; i++ ) {
311 int minrank = myrank;
312 for ( j = 1; j <= psize; j++ ) {
313 minrank =
min( minrank, plist->
at(j) );
315 if ( minrank == myrank ) {
317 for (
Dof *dof: *dman ) {
318 if ( dof->isPrimaryDof() ) {
326 buffs [ p ]->
iSend(p, 999);
332 for (
int p = 0; p < nproc; p++ ) {
334 rbuffs [ p ]->
resize( rbuffs [ p ]->givePackSizeOfInt(1) * sizeToRecv(p) );
336 OOFEM_LOG_INFO(
"[%d]Natural2GlobalOrdering :: init: Receive buffer[%d] size %d\n",
337 myrank, p, sizeToRecv(p) );
343 for (
int p = 0; p < nproc; p++ ) {
345 rbuffs [ p ]->
iRecv(p, 999);
355 for (
int p = 0; p < nproc; p++ ) {
356 if ( finished.
at(p + 1) == 0 ) {
357 if ( rbuffs [ p ]->testCompletion() ) {
360 int nite = nrecToReceive(p);
362 for (
int i = 1; i <= nite; i++ ) {
363 rbuffs [ p ]->
read(shdm);
366 OOFEM_LOG_INFO(
"[%d]Natural2GlobalOrdering :: init: Received shared node [%d] from proc %d\n",
371 if ( globloc.find(shdm) != globloc.end() ) {
372 ldm = globloc [ shdm ];
375 OOFEM_ERROR(
"[%d] invalid shared dofman received, globnum %d\n", myrank, shdm);
380 for (
Dof *dof: *dman ) {
381 if ( dof->isPrimaryDof() ) {
382 int eq = dof->giveEquationNumber(n);
386 rbuffs [ p ]->
read(val);
393 finished.
at(p + 1) = 1;
398 }
while ( fin < nproc );
409#ifdef __VERBOSE_PARALLEL
412 char locname[] =
"local", shname[] =
"shared", unkname[] =
"unknown";
413 for (
int i = 1; i <= ndofman; i++ ) {
423 for (
Dof *dof: *dman ) {
425 if ( ( _eq = dof->giveEquationNumber(n) ) ) {
426 fprintf( stderr,
"[%d] n:%6s %d[%d] (%d), leq = %d, geq = %d\n", emodel->
giveRank(), ptr, i, dman->giveGlobalNumber(),
id, _eq,
locGlobMap.at(_eq) );
428 fprintf(stderr,
"[%d] n:%6s %d[%d] (%d), leq = %d, geq = %d\n", emodel->
giveRank(), ptr, i, dman->giveGlobalNumber(),
id, _eq, 0);
440 for (
int i = 1; i <= lneq; i++ ) {
444 for (
int p = 0; p < nproc; p++ ) {
453 MPI_Barrier(MPI_COMM_WORLD);
454#ifdef __VERBOSE_PARALLEL
int giveNumberOfDofManagers() const
Returns number of dof managers in domain.
DofManager * giveDofManager(int n)
EngngModel * giveEngngModel()