//------------------------------------------------------------------------ void Matrix4x4::MatrixSetRows(Matrix4x4 *mat, const Vector4 &x, const Vector4 &y, const Vector4 &z, const Vector4 &o) { MatrixSetRow(mat, 0, x); MatrixSetRow(mat, 1, y); MatrixSetRow(mat, 2, z); MatrixSetRow(mat, 3, o); }
/****************************************************************************** * Convert CSR matrix format to Parasails matrix format * ******************************************************************************/ Matrix* csrToParaSails(int procID, int *map, int *fg2or, int *or2fg, int *IA, int *JA, double *AElts, MPI_Comm comm) { int i, j; int ncols; int origRow; int rowStart, rangeStart; int rowEnd, rangeEnd; Matrix *newMatrix; rangeStart = map[procID]; rangeEnd = map[procID+1]-1; newMatrix = MatrixCreate(comm, rangeStart, rangeEnd); for (i = rangeStart; i <= rangeEnd; i++) { origRow = fg2or[i]; rowStart = IA[origRow]; rowEnd = IA[origRow+1]-1; ncols = rowEnd - rowStart + 1; for (j=rowStart; j <= rowEnd; j++) { JA[j] = or2fg[JA[j]]; } MatrixSetRow(newMatrix, i, ncols, &JA[rowStart], &AElts[rowStart]); for (j=rowStart; j <= rowEnd; j++) { JA[j] = fg2or[JA[j]]; } } MatrixComplete(newMatrix); return newMatrix; }
static Matrix *convert_matrix(MPI_Comm comm, HYPRE_DistributedMatrix *distmat) { HYPRE_Int beg_row, end_row, row, dummy; HYPRE_Int len, *ind; HYPRE_Real *val; Matrix *mat; HYPRE_DistributedMatrixGetLocalRange(distmat, &beg_row, &end_row, &dummy, &dummy); mat = MatrixCreate(comm, beg_row, end_row); for (row=beg_row; row<=end_row; row++) { HYPRE_DistributedMatrixGetRow(distmat, row, &len, &ind, &val); MatrixSetRow(mat, row, len, ind, val); HYPRE_DistributedMatrixRestoreRow(distmat, row, &len, &ind, &val); } MatrixComplete(mat); #ifdef BALANCE_INFO matvec_timing(comm, mat); balance_info(comm, mat); #endif return mat; }
void LoadBalRecipRecv(MPI_Comm comm, Numbering *numb, int num_taken, RecipData *recip_data) { int i, row; int count; MPI_Status status; int *buffer, *bufferp; int beg_row, end_row; int len; for (i=0; i<num_taken; i++) { MPI_Probe(MPI_ANY_SOURCE, LOADBAL_REQ_TAG, comm, &status); recip_data[i].pe = status.MPI_SOURCE; MPI_Get_count(&status, MPI_INT, &count); buffer = (int *) malloc(count * sizeof(int)); MPI_Recv(buffer, count, MPI_INT, recip_data[i].pe, LOADBAL_REQ_TAG, comm, &status); bufferp = buffer; beg_row = *bufferp++; end_row = *bufferp++; recip_data[i].mat = MatrixCreateLocal(beg_row, end_row); /* Set the indices of the local matrix containing donated rows */ for (row=beg_row; row<=end_row; row++) { len = *bufferp++; NumberingGlobalToLocal(numb, len, bufferp, bufferp); MatrixSetRow(recip_data[i].mat, row, len, bufferp, NULL); bufferp += len; } free(buffer); } }
static int vmatrix_MatrixSetRow (lua_State *L) { MatrixSetRow(luaL_checkvmatrix(L, 1), luaL_checkint(L, 2), luaL_checkvector(L, 3)); return 0; }