293 int beg_row, end_row;
299 int plane, nodeRemainder;
300 int naborx1, naborx2, nabory1, nabory2;
303 bool applyBdry =
true;
305 double bcx1 = mg->bcX1;
306 double bcx2 = mg->bcX2;
307 double bcy1 = mg->bcY1;
308 double bcy2 = mg->bcY2;
313 printf_dh (
"@@@ using striped partitioning\n");
315 if (mg->debug &&
logFile != NULL)
324 i = mGlobal / mg->np;
325 beg_row = i * mg->id;
326 end_row = beg_row + i;
327 if (mg->id == mg->np - 1)
331 mg->hh = 1.0 / (
m - 1);
332 hhalf = 0.5 * mg->hh;
335 A->m = end_row - beg_row;
336 A->beg_row = beg_row;
346 fprintf (
logFile,
"generateStriped: beg_row= %i; end_row= %i; m= %i\n",
347 beg_row + 1, end_row + 1,
m);
350 for (row = beg_row; row < end_row; ++row)
352 int localRow = row - beg_row;
356 nodeRemainder = row - (k * plane);
357 j = nodeRemainder /
m;
358 i = nodeRemainder %
m;
362 fprintf (
logFile,
"row= %i x= %i y= %i z= %i\n", row + 1, i, j,
376 cval[idx] = row - plane;
384 nabory1 = cval[idx] = row -
m;
391 naborx1 = cval[idx] = row - 1;
402 naborx2 = cval[idx] = row + 1;
409 nabory2 = cval[idx] = row +
m;
418 cval[idx] = row + plane;
429 int offset = rp[localRow - 1];
430 int len = rp[localRow] - rp[localRow - 1];
437 coeff = mg->A (mg->a, i + hhalf, j, k);
438 ctr = mg->A (mg->a, i - hhalf, j, k);
440 &(rhs[localRow - 1]), bcx1, coeff, ctr,
443 else if (i == nx - 1)
445 coeff = mg->A (mg->a, i - hhalf, j, k);
446 ctr = mg->A (mg->a, i + hhalf, j, k);
448 &(rhs[localRow - 1]), bcx2, coeff, ctr,
453 coeff = mg->B (mg->b, i, j + hhalf, k);
454 ctr = mg->B (mg->b, i, j - hhalf, k);
456 &(rhs[localRow - 1]), bcy1, coeff, ctr,
459 else if (j == ny - 1)
461 coeff = mg->B (mg->b, i, j - hhalf, k);
462 ctr = mg->B (mg->b, i, j + hhalf, k);
464 &(rhs[localRow - 1]), bcy2, coeff, ctr,
794 int px = mg->px,
py = mg->py,
pz = mg->pz;
797 int nx =
cc, ny =
cc, nz =
cc;
798 int lowerx, upperx, lowery, uppery, lowerz, upperz;
802 int idx = 0, localRow = 0;
803 int naborx1, naborx2, nabory1, nabory2, naborz1, naborz2;
806 double hhalf = 0.5 * mg->hh;
807 double bcx1 = mg->bcX1;
808 double bcx2 = mg->bcX2;
809 double bcy1 = mg->bcY1;
810 double bcy2 = mg->bcY2;
818 if (mg->debug &&
logFile != NULL)
825 q = ((
id - p) /
px) %
py;
826 r = (
id - p -
px * q) / (
px *
py);
831 "this proc's position in subdomain grid: p= %i q= %i r= %i",
840 upperx = lowerx + nx;
842 uppery = lowery + ny;
844 upperz = lowerz + nz;
848 sprintf (
msgBuf_dh,
"local grid parameters: lowerx= %i upperx= %i",
851 sprintf (
msgBuf_dh,
"local grid parameters: lowery= %i uppery= %i",
854 sprintf (
msgBuf_dh,
"local grid parameters: lowerz= %i upperz= %i",
859 startRow = mg->first;
862 for (z = lowerz; z < upperz; z++)
864 for (y = lowery; y < uppery; y++)
866 for (x = lowerx; x < upperx; x++)
871 fprintf (
logFile,
"row= %i x= %i y= %i z= %i\n",
872 localRow + startRow + 1, x, y, z);
914 cval[idx] = localRow + startRow;
960 int globalRow = localRow + startRow - 1;
961 int offset = rp[localRow - 1];
962 int len = rp[localRow] - rp[localRow - 1];
969 coeff = mg->A (mg->a, x + hhalf, y, z);
970 ctr = mg->A (mg->a, x - hhalf, y, z);
973 &(rhs[localRow - 1]), bcx1, coeff,
976 else if (x == nx *
px - 1)
978 coeff = mg->A (mg->a, x - hhalf, y, z);
979 ctr = mg->A (mg->a, x + hhalf, y, z);
982 &(rhs[localRow - 1]), bcx2, coeff,
987 coeff = mg->B (mg->b, x, y + hhalf, z);
988 ctr = mg->B (mg->b, x, y - hhalf, z);
991 &(rhs[localRow - 1]), bcy1, coeff,
994 else if (y == ny *
py - 1)
996 coeff = mg->B (mg->b, x, y - hhalf, z);
997 ctr = mg->B (mg->b, x, y + hhalf, z);
1000 &(rhs[localRow - 1]), bcy2, coeff,
1007 coeff = mg->B (mg->b, x, y, z + hhalf);
1008 ctr = mg->B (mg->b, x, y, z - hhalf);
1011 &(rhs[localRow - 1]), bcy1,
1012 coeff, ctr, naborz2);
1014 else if (z == nz * nx - 1)
1016 coeff = mg->B (mg->b, x, y, z - hhalf);
1017 ctr = mg->B (mg->b, x, y, z + hhalf);
1020 &(rhs[localRow - 1]), bcy1,
1021 coeff, ctr, naborz1);