Dear all,
I have been experiencing incoherent data entries from this code below, when printing the array. Maybe I’am doing something wrong. ---------------- PetscInt nlines = 8; // lines PetscInt ncols = 4; // columns PetscMPIInt rank; PetscMPIInt size; // Initialize PETSc PetscCall(PetscInitialize(&argc, &args, NULL, NULL)); PetscCallMPI(MPI_Comm_rank(MPI_COMM_WORLD, &rank)); PetscCallMPI(MPI_Comm_size(MPI_COMM_WORLD, &size)); Mat R_full; Mat R_part; PetscInt idx_first_row = 0; PetscInt idx_one_plus_last_row = nlines / 2; PetscCall(MatCreateDense(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, nlines, ncols, NULL, &R_full)); // Get sub matrix PetscCall(MatDenseGetSubMatrix(R_full, idx_first_row, idx_one_plus_last_row, PETSC_DECIDE, PETSC_DECIDE, &R_part)); // Add entries to sub matrix MatSetRandom(R_part, NULL); //View sub matrix PetscCall(MatView(R_part, PETSC_VIEWER_STDOUT_WORLD)); // Get array from sub matrix and print entries PetscScalar *buffer; PetscCall(MatDenseGetArray(R_part, &buffer)); PetscInt idx_end = (nlines/2) * ncols; for (int i = 0; i < idx_end; i++) { PetscPrintf(PETSC_COMM_SELF, "buffer[%d] = %e \n", i, buffer[i]); } //Restore array to sub matrix PetscCall(MatDenseRestoreArray(R_part, &buffer)); // Restore sub matrix PetscCall(MatDenseRestoreSubMatrix(R_full, &R_part)); // View the initial matrix PetscCall(MatView(R_full, PETSC_VIEWER_STDOUT_WORLD)); PetscCall(MatDestroy(&R_full)); PetscCall(PetscFinalize()); return 0; ---------------- Thanks Medane