Evan Um via petsc-users <petsc-users@mcs.anl.gov> writes: > Dear PETSC users, > > I try to verify a matrix by printing a PETSC matrix and comparing its > elements with reference values. Below is my test code. > > It works well when a single process is used. The output file is created > quickly. In contrast, when multiple processes (>2) are used, printing > matrix is stuck (the parallel matrix is assembled very quickly owing to > memory preallocation). The output file just prints two lines below. No > element is printed. > > Mat Object: 2 MPI processes > type: mpiaij > > I assume that printing matrix is also designed for a parallel matrix. Does > this suggest that my parallel matrix includes any errors? Otherwise, does > this work only for a serial matrix? > > Thanks for reading this question. > > Regards, > Evan > > MatCreateAIJ(PETSC_COMM_WORLD, m, n, M, N, 0, d_nnz_A, 0, o_nnz_A, &Mat_A); > MatSetFromOptions(Mat_A); > > for (int i=rstart_A[rank]; i<rend_A[rank]; i++) { > mat_value=val_A[i]+PETSC_i*0.0; > MatSetValue(Mat_A, i_A[i],j_A[i],mat_value,ADD_VALUES); > } > > MatAssemblyBegin(Mat_A, MAT_FINAL_ASSEMBLY); > MatAssemblyEnd(Mat_A, MAT_FINAL_ASSEMBLY); > > PetscViewer viewer; > PetscViewerASCIIOpen(PETSC_COMM_WORLD,"Mat_A",&viewer); > MatView(Mat_A,viewer); > PetscViewerPushFormat(viewer,PETSC_VIEWER_ASCII_MATLAB);
Did you intend to use the MATLAB format? If so, MatView needs to be called while the format is pushed, so swap the two lines above. > PetscViewerPopFormat(viewer); > PetscViewerDestroy(&viewer);