278 int loCount = er->sg->loCount, *loNabors = er->sg->loNabors;
281 int **lengths = er->rcv_row_lengths, **numbers = er->rcv_row_numbers;
284 if (
logFile != NULL && er->debug)
288 for (i = 0; i < loCount; ++i)
290 int nabor = loNabors[i];
296 MPI_Waitall (loCount, er->req1, er->status);
297 MPI_Waitall (loCount, er->req2, er->status);
302 "\nEXR rcv_ext_storage_private:: <nabor,rowCount,nzCount>\nEXR ");
303 for (i = 0; i < loCount; ++i)
311 for (i = 0; i < loCount; ++i)
314 int nabor = loNabors[i];
315 lengths[i] = (
int *)
MALLOC_DH (nz *
sizeof (
int));
317 numbers[i] = (
int *)
MALLOC_DH (nz *
sizeof (
int));
324 MPI_Waitall (loCount, er->req1, er->status);
325 MPI_Waitall (loCount, er->req2, er->status);
330 for (i = 0; i < loCount; ++i)
333 "\nEXR rows <number,length> to be received from P_%i\nEXR ",
336 for (j = 0; j < nz; ++j)
337 fprintf (
logFile,
"<%i,%i> ", numbers[i][j], lengths[i][j]);
373 int i, j, offset, rowCt = 0;
376 int *extRowCval = er->cvalExt, *extRowFill = er->fillExt;
377 REAL_DH *extRowAval = er->avalExt;
383 for (i = 0; i < loCount; ++i)
389 er->rowLookup = table;
393 for (i = 0; i < loCount; ++i)
400 for (j = 0; j < rowCount; ++j)
406 record.iData = rowLength;
407 record.iDataPtr = extRowCval + offset;
408 record.iDataPtr2 = extRowFill + offset;
409 record.fDataPtr = extRowAval + offset;
423 int i, loCount = er->sg->loCount, *loNabors = er->sg->loNabors;
424 int nabor, nz = 0, offset = 0;
425 int *extRowCval = er->cvalExt, *extRowFill = er->fillExt;
426 double *extRowAval = er->avalExt;
430 for (i = 0; i < loCount; ++i)
438 MPI_Irecv (extRowAval + offset, nz, MPI_DOUBLE, nabor,
AVAL_TAG,
444 MPI_Waitall (loCount, er->req1, er->status);
445 MPI_Waitall (loCount, er->req2, er->status);
446 MPI_Waitall (loCount, er->req3, er->status);
456 int i, j, k, rwCt, idx = 0, nabor;
457 int loCount = er->sg->loCount, *loNabors = er->sg->loNabors;
461 "\nEXR ================= received rows, printed from buffers ==============\n");
464 for (i = 0; i < loCount; ++i)
466 rwCt = er->rcv_row_counts[i];
468 fprintf (
logFile,
"\nEXR Rows received from P_%i:\n", nabor);
471 for (j = 0; j < rwCt; ++j)
473 int rowNum = er->rcv_row_numbers[i][j];
474 int rowLen = er->rcv_row_lengths[i][j];
475 fprintf (
logFile,
"EXR %i :: ", 1 + rowNum);
476 for (k = 0; k < rowLen; ++k)
480 fprintf (
logFile,
"%i,%i ; ", er->cvalExt[idx],
485 fprintf (
logFile,
"%i,%i,%g ; ", er->cvalExt[idx],
486 er->fillExt[idx], er->avalExt[idx]);
495 "\nEXR =============== received rows, printed from hash table =============\n");
496 for (i = 0; i < n; ++i)
498 int len, *cval, *fill;
504 fprintf (
logFile,
"EXR %i :: ", i + 1);
505 for (j = 0; j < len; ++j)
509 fprintf (
logFile,
"%i,%i ; ", cval[j], fill[j]);
513 fprintf (
logFile,
"%i,%i,%g ; ", cval[j], fill[j], aval[j]);
559 int *nzCounts, *nzNumbers;
560 int hiCount = er->sg->hiCount, *hiNabors = er->sg->hiNabors;
561 int *rp = er->F->rp, *diag = er->F->diag;
563 int beg_row = er->F->beg_row;
564 int rowCount = er->F->bdry_count;
565 int first_bdry = er->F->first_bdry;
568 if (
logFile != NULL && er->debug)
572 nzCounts = er->my_row_counts = (
int *)
MALLOC_DH (rowCount *
sizeof (
int));
574 nzNumbers = er->my_row_numbers =
575 (
int *)
MALLOC_DH (rowCount *
sizeof (
int));
580 for (i = first_bdry, j = 0; i < m; ++i, ++j)
582 int tmp = (rp[i + 1] - diag[i]);
590 fprintf (
logFile,
"EXR send_ext_storage_private:: rowCount = %i\n",
592 fprintf (
logFile,
"EXR send_ext_storage_private:: nz Count = %i\n", nz);
596 for (i = 0; i < hiCount; ++i)
598 int nabor = hiNabors[i];
605 for (i = 0, j = first_bdry; j < m; ++i, ++j)
607 nzNumbers[i] = j + beg_row;
615 for (i = 0; i < hiCount; ++i)
617 int nabor = hiNabors[i];
633 int i, j, hiCount = er->sg->hiCount, *hiNabors = er->sg->hiNabors;
634 int offset, nz = er->nzSend;
637 int *cval = er->F->cval, *fill = er->F->fill;
639 int *rp = er->F->rp, *diag = er->F->diag;
640 int first_bdry = er->F->first_bdry;
644 if (
logFile != NULL && er->debug)
657 for (i = first_bdry, j = 0; i < m; ++i, ++j)
659 int tmp = (rp[i + 1] - diag[i]);
661 memcpy (
cvalSend + offset, cval + diag[i], tmp *
sizeof (
int));
662 memcpy (
fillSend + offset, fill + diag[i], tmp *
sizeof (
int));
663 memcpy (
avalSend + offset, aval + diag[i], tmp *
sizeof (
double));
669 int beg_row = er->F->beg_row;
674 "\nEXR ======================= send buffers ======================\n");
676 for (i = first_bdry, j = 0; i < m; ++i, ++j)
678 int tmp = (rp[i + 1] - diag[i]);
679 fprintf (
logFile,
"EXR %i :: ", i + beg_row);
681 for (j = 0; j < tmp; ++j)
699 for (i = 0; i < hiCount; ++i)
701 int nabor = hiNabors[i];
718 int hiCount = er->sg->hiCount;
722 MPI_Waitall (hiCount, er->req1,
status);
723 MPI_Waitall (hiCount, er->req2,
status);
724 MPI_Waitall (hiCount, er->req3,
status);
725 MPI_Waitall (hiCount, er->req4,
status);
726 MPI_Waitall (hiCount, er->cval_req,
status);
727 MPI_Waitall (hiCount, er->fill_req,
status);
728 MPI_Waitall (hiCount, er->aval_req,
status);