Dear petsc team, could you please tell me what's wrong with the attached example file? I run it on 4 processors with petsc-3.3-p1.
What could error message "Local size 1000 not compatible with block size 3!" mean? I've another question related to this issue. What is the real purpose of PetscViewerBinarySkipInfo function? I see no reason to skip creating "info" file, because the file produced by the attached example seems to be correct. Moreover, similar block size error occurs in our code while reading file with multiple vectors, irrespective whether "info" file exists or not. Thank you, Anton -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120718/cd65a159/attachment.html> -------------- next part -------------- //---------------------------------------------------------------------------------------- #include <petscvec.h> #include <petscdmda.h> //---------------------------------------------------------------------------------------- #undef __FUNCT__ #define __FUNCT__ "SaveVector" PetscErrorCode SaveVector(Vec V3, Vec V1) { PetscErrorCode ierr; PetscViewer view_out; char SaveFileName[PETSC_MAX_PATH_LEN]="vec.dat"; ierr = PetscViewerCreate(PETSC_COMM_WORLD, &view_out); CHKERRQ(ierr); ierr = PetscViewerSetType(view_out, PETSCVIEWERBINARY); CHKERRQ(ierr); ierr = PetscViewerFileSetMode(view_out, FILE_MODE_WRITE); CHKERRQ(ierr); ierr = PetscViewerFileSetName(view_out, SaveFileName); CHKERRQ(ierr); ierr = VecView(V1, view_out); CHKERRQ(ierr); ierr = VecView(V3, view_out); CHKERRQ(ierr); ierr = PetscViewerDestroy(&view_out); CHKERRQ(ierr); PetscFunctionReturn(0); } //---------------------------------------------------------------------------------------- #undef __FUNCT__ #define __FUNCT__ "ReadVector" PetscErrorCode ReadVector(Vec V3, Vec V1) { PetscErrorCode ierr; PetscViewer view_in; char LoadFileName[PETSC_MAX_PATH_LEN]="vec.dat"; printf("Reading vector\n"); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD, LoadFileName, FILE_MODE_READ, &view_in); CHKERRQ(ierr); ierr = VecLoad(V1, view_in); CHKERRQ(ierr); ierr = VecLoad(V3, view_in); CHKERRQ(ierr); ierr = PetscViewerDestroy(&view_in); CHKERRQ(ierr); PetscFunctionReturn(0); } //---------------------------------------------------------------------------------------- #undef __FUNCT__ #define __FUNCT__ "main" int main(int argc,char **argv) { PetscErrorCode ierr; PetscInt dof, s = 1; PetscInt M = 20, N = 20, P = 20; PetscScalar cf = 1.0; DM da3, da1; Vec V3w, V3r, V1w, V1r; ierr = PetscInitialize(&argc, &argv, PETSC_NULL, PETSC_NULL); CHKERRQ(ierr); dof = 3; ierr = DMDACreate3d(PETSC_COMM_WORLD, DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_NONE, DMDA_STENCIL_BOX, M, N, P, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, dof, s, PETSC_NULL, PETSC_NULL, PETSC_NULL, &da3); CHKERRQ(ierr); dof = 1; ierr = DMDACreate3d(PETSC_COMM_WORLD, DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_NONE, DMDA_STENCIL_BOX, M, N, P, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, dof, s, PETSC_NULL, PETSC_NULL, PETSC_NULL, &da1); CHKERRQ(ierr); ierr = DMCreateGlobalVector(da3, &V3w); CHKERRQ(ierr); ierr = DMCreateGlobalVector(da3, &V3r); CHKERRQ(ierr); ierr = DMCreateGlobalVector(da1, &V1w); CHKERRQ(ierr); ierr = DMCreateGlobalVector(da1, &V1r); CHKERRQ(ierr); ierr = VecSet(V3w, cf); CHKERRQ(ierr); ierr = VecSet(V1w, cf); CHKERRQ(ierr); ierr = SaveVector(V3w, V1w); CHKERRQ(ierr); ierr = ReadVector(V3r, V1r); CHKERRQ(ierr); ierr = DMDestroy(&da3); CHKERRQ(ierr); ierr = DMDestroy(&da1); CHKERRQ(ierr); ierr = VecDestroy(&V3w); CHKERRQ(ierr); ierr = VecDestroy(&V3r); CHKERRQ(ierr); ierr = VecDestroy(&V1w); CHKERRQ(ierr); ierr = VecDestroy(&V1r); CHKERRQ(ierr); ierr = PetscFinalize(); CHKERRQ(ierr); return 0; } //----------------------------------------------------------------------------------------
