The output is correct (only confusing). For PETSc DMDA by default viewing a parallel matrix converts it to the "natural" ordering instead of the PETSc parallel ordering.
See the Notes in https://urldefense.us/v3/__https://petsc.org/release/manualpages/DM/DMCreateMatrix/__;!!G_uCfscf7eWS!dHznAiOiU4NDCipIaS1et2IIGx1u779XYQmMGk4EeeLQf41tAhbciI4ne1JKfOR0jG5WCsFm7dRWuEy6KdNhM5w$ Barry > On Mar 18, 2024, at 8:06 AM, Waltz Jan <[email protected]> wrote: > > This Message Is From an External Sender > This message came from outside your organization. > PETSc version: 3.20.4 > Program: > #include <petscdmda.h> > #include <petscsys.h> > #include <petscdm.h> > #include <petscdmda.h> > #include <petscsys.h> > #include <petscdm.h> > #include <petsc/private/snesimpl.h> > > int main() > { > PetscInitialize(NULL, NULL, NULL, NULL); > DM da; > DMDACreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_GHOSTED, > DM_BOUNDARY_GHOSTED, DMDA_STENCIL_STAR, > 10, 1, 10, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, 3, 1, > NULL, NULL, NULL, &da); > DMSetFromOptions(da); > DMSetUp(da); > Mat Jac; > DMCreateMatrix(da, &Jac); > int row = 100, col = 100; > double val = 1.; > MatSetValues(Jac, 1, &row, 1, &col, &val, INSERT_VALUES); > MatAssemblyBegin(Jac, MAT_FINAL_ASSEMBLY); > MatAssemblyEnd(Jac, MAT_FINAL_ASSEMBLY); > > PetscViewer viewer; > PetscViewerASCIIOpen(PETSC_COMM_WORLD, "./jacobianmatrix.m", &viewer); > PetscViewerPushFormat(viewer, PETSC_VIEWER_ASCII_MATLAB); > MatView(Jac, viewer); > PetscViewerDestroy(&viewer); > > PetscFinalize(); > } > > When I ran the program with np = 6, I got the result as the below > <image.png> > It's obviously wrong. > When I ran the program with np = 1 or 8, I got the right result as > <image.png>
