int hypre_ComputeInfoProjectSend( hypre_ComputeInfo *compute_info, hypre_Index index, hypre_Index stride ) { int ierr = 0; hypre_CommInfoProjectSend(hypre_ComputeInfoCommInfo(compute_info), index, stride); return ierr; }
HYPRE_Int hypre_StructInterpAssemble( hypre_StructMatrix *A, hypre_StructMatrix *P, HYPRE_Int P_stored_as_transpose, HYPRE_Int cdir, hypre_Index index, hypre_Index stride ) { hypre_StructGrid *grid = hypre_StructMatrixGrid(A); hypre_BoxArrayArray *box_aa; hypre_BoxArray *box_a; hypre_Box *box; hypre_CommInfo *comm_info; hypre_CommPkg *comm_pkg; hypre_CommHandle *comm_handle; HYPRE_Int num_ghost[] = {0, 0, 0, 0, 0, 0}; HYPRE_Int i, j, s, dim; if (hypre_StructMatrixConstantCoefficient(P) != 0) { return hypre_error_flag; } /* set num_ghost */ dim = hypre_StructGridDim(grid); for (j = 0; j < dim; j++) { num_ghost[2*j] = 1; num_ghost[2*j+1] = 1; } if (P_stored_as_transpose) { num_ghost[2*cdir] = 2; num_ghost[2*cdir+1] = 2; } /* comm_info <-- From fine grid grown by num_ghost */ hypre_CreateCommInfoFromNumGhost(grid, num_ghost, &comm_info); /* Project and map comm_info onto coarsened index space */ hypre_CommInfoProjectSend(comm_info, index, stride); hypre_CommInfoProjectRecv(comm_info, index, stride); for (s = 0; s < 3; s++) { switch(s) { case 0: box_aa = hypre_CommInfoSendBoxes(comm_info); hypre_SetIndex(hypre_CommInfoSendStride(comm_info), 1, 1, 1); break; case 1: box_aa = hypre_CommInfoRecvBoxes(comm_info); hypre_SetIndex(hypre_CommInfoRecvStride(comm_info), 1, 1, 1); break; case 2: box_aa = hypre_CommInfoSendRBoxes(comm_info); break; } hypre_ForBoxArrayI(j, box_aa) { box_a = hypre_BoxArrayArrayBoxArray(box_aa, j); hypre_ForBoxI(i, box_a) { box = hypre_BoxArrayBox(box_a, i); hypre_StructMapFineToCoarse(hypre_BoxIMin(box), index, stride, hypre_BoxIMin(box)); hypre_StructMapFineToCoarse(hypre_BoxIMax(box), index, stride, hypre_BoxIMax(box)); } }