[petsc-users] block size
Anton Popov
popov at uni-mainz.de
Wed Jul 18 07:54:56 CDT 2012
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;
}
//----------------------------------------------------------------------------------------
More information about the petsc-users
mailing list