int main(int argc,char **args) { PetscErrorCode ierr; PetscViewer viewer; ierr = PetscInitialize(&argc,&args,(char *)0,help);CHKERRQ(ierr); ierr = PetscViewerCreate(PETSC_COMM_WORLD,&viewer);CHKERRQ(ierr); ierr = PetscViewerSetFromOptions(viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = PetscViewerASCIIOpen(PETSC_COMM_WORLD,"stdout",&viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
int main(int argc,char **argv) { PetscErrorCode ierr; DM da2D; PetscInt i,j,ixs, ixm, iys, iym;; PetscViewer H5viewer; PetscScalar xm = -1.0, xp=1.0; PetscScalar ym = -1.0, yp=1.0; PetscScalar value = 1.0,dx,dy; PetscInt Nx = 40, Ny=40; Vec gauss,input; PetscScalar **gauss_ptr; PetscReal norm; const char *vecname; dx=(xp-xm)/(Nx-1); dy=(yp-ym)/(Ny-1); /* Initialize the Petsc context */ ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; ierr = DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE,DMDA_STENCIL_STAR,Nx,Ny,PETSC_DECIDE,PETSC_DECIDE,1,1,NULL,NULL,&da2D);CHKERRQ(ierr); ierr = DMSetFromOptions(da2D);CHKERRQ(ierr); ierr = DMSetUp(da2D);CHKERRQ(ierr); /* Set the coordinates */ ierr = DMDASetUniformCoordinates(da2D, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0);CHKERRQ(ierr); /* Declare gauss as a DMDA component */ ierr = DMCreateGlobalVector(da2D,&gauss);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject) gauss, "pressure");CHKERRQ(ierr); /* Initialize vector gauss with a constant value (=1) */ ierr = VecSet(gauss,value);CHKERRQ(ierr); /* Get the coordinates of the corners for each process */ ierr = DMDAGetCorners(da2D, &ixs, &iys, 0, &ixm, &iym, 0);CHKERRQ(ierr); /* Build the gaussian profile (exp(-x^2-y^2)) */ ierr = DMDAVecGetArray(da2D,gauss,&gauss_ptr);CHKERRQ(ierr); for (j=iys; j<iys+iym; j++) { for (i=ixs; i<ixs+ixm; i++) { gauss_ptr[j][i]=PetscExpScalar(-(xm+i*dx)*(xm+i*dx)-(ym+j*dy)*(ym+j*dy)); } } ierr = DMDAVecRestoreArray(da2D,gauss,&gauss_ptr);CHKERRQ(ierr); /* Create the HDF5 viewer */ ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD,"gauss.h5",FILE_MODE_WRITE,&H5viewer);CHKERRQ(ierr); ierr = PetscViewerSetFromOptions(H5viewer);CHKERRQ(ierr); /* Write the H5 file */ ierr = VecView(gauss,H5viewer);CHKERRQ(ierr); /* Close the viewer */ ierr = PetscViewerDestroy(&H5viewer);CHKERRQ(ierr); ierr = VecDuplicate(gauss,&input);CHKERRQ(ierr); ierr = PetscObjectGetName((PetscObject)gauss,&vecname);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject)input,vecname);CHKERRQ(ierr); /* Create the HDF5 viewer for reading */ ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD,"gauss.h5",FILE_MODE_READ,&H5viewer);CHKERRQ(ierr); ierr = PetscViewerSetFromOptions(H5viewer);CHKERRQ(ierr); ierr = VecLoad(input,H5viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&H5viewer);CHKERRQ(ierr); ierr = VecAXPY(input,-1.0,gauss);CHKERRQ(ierr); ierr = VecNorm(input,NORM_2,&norm);CHKERRQ(ierr); if (norm > 1.e-6) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Vec read in does not match vector written out"); ierr = VecDestroy(&input);CHKERRQ(ierr); ierr = VecDestroy(&gauss);CHKERRQ(ierr); ierr = DMDestroy(&da2D);CHKERRQ(ierr); ierr = PetscFinalize(); return ierr; }
int main(int argc,char **argv) { PetscErrorCode ierr; PetscViewer viewer; DM da; Vec global,local,global2; PetscMPIInt rank; PetscBool flg; PetscInt ndof; /* Every PETSc routine should begin with the PetscInitialize() routine. argc, argv - These command line arguments are taken to extract the options supplied to PETSc and options supplied to MPI. help - When PETSc executable is invoked with the option -help, it prints the various options that can be applied at runtime. The user can use the "help" variable place additional help messages in this printout. */ ierr = PetscInitialize(&argc,&argv,(char*)0,help);CHKERRQ(ierr); /* Get number of DOF's from command line */ ierr = PetscOptionsBegin(PETSC_COMM_WORLD,NULL,"DMDA VecView/VecLoad example","");CHKERRQ(ierr); { ndof = 1; PetscOptionsInt("-ndof","Number of DOF's in DMDA","",ndof,&ndof,NULL); } ierr = PetscOptionsEnd();CHKERRQ(ierr); /* Create a DMDA and an associated vector */ ierr = DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE,DMDA_STENCIL_BOX,100,90,PETSC_DECIDE,PETSC_DECIDE,ndof,1,NULL,NULL,&da);CHKERRQ(ierr); ierr = DMCreateGlobalVector(da,&global);CHKERRQ(ierr); ierr = DMCreateLocalVector(da,&local);CHKERRQ(ierr); ierr = VecSet(global,-1.0);CHKERRQ(ierr); ierr = DMGlobalToLocalBegin(da,global,INSERT_VALUES,local);CHKERRQ(ierr); ierr = DMGlobalToLocalEnd(da,global,INSERT_VALUES,local);CHKERRQ(ierr); ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); ierr = VecScale(local,rank+1);CHKERRQ(ierr); ierr = DMLocalToGlobalBegin(da,local,ADD_VALUES,global);CHKERRQ(ierr); ierr = DMLocalToGlobalEnd(da,local,ADD_VALUES,global);CHKERRQ(ierr); /* Create the HDF5 viewer for writing */ ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD,"hdf5output.h5",FILE_MODE_WRITE,&viewer);CHKERRQ(ierr); ierr = PetscViewerSetFromOptions(viewer);CHKERRQ(ierr); /* Write the Vec without one extra dimension for BS */ ierr = PetscViewerHDF5SetBaseDimension2(viewer, PETSC_FALSE); ierr = PetscObjectSetName((PetscObject) global, "noBsDim");CHKERRQ(ierr); ierr = VecView(global,viewer);CHKERRQ(ierr); /* Write the Vec with one extra, 1-sized, dimension for BS */ ierr = PetscViewerHDF5SetBaseDimension2(viewer, PETSC_TRUE); ierr = PetscObjectSetName((PetscObject) global, "bsDim");CHKERRQ(ierr); ierr = VecView(global,viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = MPI_Barrier(PETSC_COMM_WORLD);CHKERRQ(ierr); ierr = VecDuplicate(global,&global2);CHKERRQ(ierr); /* Create the HDF5 viewer for reading */ ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD,"hdf5output.h5",FILE_MODE_READ,&viewer);CHKERRQ(ierr); ierr = PetscViewerSetFromOptions(viewer);CHKERRQ(ierr); /* Load the Vec without the BS dim and compare */ ierr = PetscObjectSetName((PetscObject) global2, "noBsDim");CHKERRQ(ierr); ierr = VecLoad(global2,viewer);CHKERRQ(ierr); ierr = VecEqual(global,global2,&flg);CHKERRQ(ierr); if (flg) { ierr = PetscPrintf(PETSC_COMM_WORLD,"Vectors are equal\n");CHKERRQ(ierr); } else { ierr = PetscPrintf(PETSC_COMM_WORLD,"Vectors are not equal\n");CHKERRQ(ierr); } /* Load the Vec with one extra, 1-sized, BS dim and compare */ ierr = PetscObjectSetName((PetscObject) global2, "bsDim");CHKERRQ(ierr); ierr = VecLoad(global2,viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = VecEqual(global,global2,&flg);CHKERRQ(ierr); if (flg) { ierr = PetscPrintf(PETSC_COMM_WORLD,"Vectors are equal\n");CHKERRQ(ierr); } else { ierr = PetscPrintf(PETSC_COMM_WORLD,"Vectors are not equal\n");CHKERRQ(ierr); } /* clean up and exit */ ierr = VecDestroy(&local);CHKERRQ(ierr); ierr = VecDestroy(&global);CHKERRQ(ierr); ierr = VecDestroy(&global2);CHKERRQ(ierr); ierr = DMDestroy(&da);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }