HYPRE_Int main( HYPRE_Int argc, char *argv[] ) { hypre_ParCSRBooleanMatrix *A; hypre_ParCSRBooleanMatrix *C; hypre_CSRBooleanMatrix *As; HYPRE_Int *row_starts, *col_starts; HYPRE_Int num_procs, my_id; /* Initialize MPI */ hypre_MPI_Init(&argc, &argv); hypre_MPI_Comm_size(hypre_MPI_COMM_WORLD,&num_procs); hypre_MPI_Comm_rank(hypre_MPI_COMM_WORLD,&my_id); row_starts = NULL; col_starts = NULL; if (my_id == 0) { As = hypre_CSRBooleanMatrixRead("inpr"); hypre_printf(" read input A\n"); } A = hypre_CSRBooleanMatrixToParCSRBooleanMatrix(hypre_MPI_COMM_WORLD, As, row_starts, col_starts); row_starts = hypre_ParCSRBooleanMatrix_Get_RowStarts(A); col_starts = hypre_ParCSRBooleanMatrix_Get_ColStarts(A); hypre_ParCSRBooleanMatrixPrint(A, "echo_A" ); hypre_ParCSRBooleanMatrixPrintIJ(A, "echo_AIJ" ); C = hypre_ParBooleanAAt( A ); hypre_ParCSRBooleanMatrixPrint(C, "result"); hypre_ParCSRBooleanMatrixPrintIJ(C, "resultIJ"); if (my_id == 0) { hypre_CSRBooleanMatrixDestroy(As); } hypre_ParCSRBooleanMatrixDestroy(A); hypre_ParCSRBooleanMatrixDestroy(C); hypre_MPI_Finalize(); return 0; }
hypre_ParCSRBooleanMatrix * hypre_ParCSRBooleanMatrixRead( MPI_Comm comm, const char *file_name ) { hypre_ParCSRBooleanMatrix *matrix; hypre_CSRBooleanMatrix *diag; hypre_CSRBooleanMatrix *offd; HYPRE_Int my_id, i, num_procs; char new_file_d[80], new_file_o[80], new_file_info[80]; HYPRE_Int global_num_rows, global_num_cols, num_cols_offd; HYPRE_Int local_num_rows; HYPRE_Int *row_starts; HYPRE_Int *col_starts; HYPRE_Int *col_map_offd; FILE *fp; HYPRE_Int equal = 1; hypre_MPI_Comm_rank(comm,&my_id); hypre_MPI_Comm_size(comm,&num_procs); row_starts = hypre_CTAlloc(HYPRE_Int, num_procs+1); col_starts = hypre_CTAlloc(HYPRE_Int, num_procs+1); hypre_sprintf(new_file_d,"%s.D.%d",file_name,my_id); hypre_sprintf(new_file_o,"%s.O.%d",file_name,my_id); hypre_sprintf(new_file_info,"%s.INFO.%d",file_name,my_id); fp = fopen(new_file_info, "r"); hypre_fscanf(fp, "%d", &global_num_rows); hypre_fscanf(fp, "%d", &global_num_cols); hypre_fscanf(fp, "%d", &num_cols_offd); for (i=0; i < num_procs; i++) hypre_fscanf(fp, "%d %d", &row_starts[i], &col_starts[i]); row_starts[num_procs] = global_num_rows; col_starts[num_procs] = global_num_cols; col_map_offd = hypre_CTAlloc(HYPRE_Int, num_cols_offd); for (i=0; i < num_cols_offd; i++) hypre_fscanf(fp, "%d", &col_map_offd[i]); fclose(fp); for (i=num_procs; i >= 0; i--) if (row_starts[i] != col_starts[i]) { equal = 0; break; } if (equal) { hypre_TFree(col_starts); col_starts = row_starts; } diag = hypre_CSRBooleanMatrixRead(new_file_d); local_num_rows = hypre_CSRBooleanMatrix_Get_NRows(diag); if (num_cols_offd) { offd = hypre_CSRBooleanMatrixRead(new_file_o); } else offd = hypre_CSRBooleanMatrixCreate(local_num_rows,0,0); matrix = hypre_CTAlloc(hypre_ParCSRBooleanMatrix, 1); hypre_ParCSRBooleanMatrix_Get_Comm(matrix) = comm; hypre_ParCSRBooleanMatrix_Get_GlobalNRows(matrix) = global_num_rows; hypre_ParCSRBooleanMatrix_Get_GlobalNCols(matrix) = global_num_cols; hypre_ParCSRBooleanMatrix_Get_StartRow(matrix) = row_starts[my_id]; hypre_ParCSRBooleanMatrix_Get_FirstColDiag(matrix) = col_starts[my_id]; hypre_ParCSRBooleanMatrix_Get_RowStarts(matrix) = row_starts; hypre_ParCSRBooleanMatrix_Get_ColStarts(matrix) = col_starts; hypre_ParCSRBooleanMatrix_Get_CommPkg(matrix) = NULL; /* set defaults */ hypre_ParCSRBooleanMatrix_Get_OwnsData(matrix) = 1; hypre_ParCSRBooleanMatrix_Get_OwnsRowStarts(matrix) = 1; hypre_ParCSRBooleanMatrix_Get_OwnsColStarts(matrix) = 1; if (row_starts == col_starts) hypre_ParCSRBooleanMatrix_Get_OwnsColStarts(matrix) = 0; hypre_ParCSRBooleanMatrix_Get_Diag(matrix) = diag; hypre_ParCSRBooleanMatrix_Get_Offd(matrix) = offd; if (num_cols_offd) hypre_ParCSRBooleanMatrix_Get_ColMapOffd(matrix) = col_map_offd; else hypre_ParCSRBooleanMatrix_Get_ColMapOffd(matrix) = NULL; return matrix; }