Actual source code: ex6.c
petsc-3.3-p7 2013-05-11
2: static char help[] = "Writes an array to a file, then reads an array from a file, then forms a vector.\n\n";
4: #include <petscvec.h>
8: int main(int argc,char **args)
9: {
11: PetscMPIInt size;
12: int fd;
13: PetscInt i,m = 10,sz;
14: PetscScalar *avec,*array;
15: Vec vec;
16: PetscViewer view_out,view_in;
18: PetscInitialize(&argc,&args,(char *)0,help);
19: MPI_Comm_size(PETSC_COMM_WORLD,&size);
20: if (size != 1) SETERRQ(PETSC_COMM_SELF,1,"This is a uniprocessor example only!");
21:
22: PetscOptionsGetInt(PETSC_NULL,"-m",&m,PETSC_NULL);
24: /* ---------------------------------------------------------------------- */
25: /* PART 1: Write some data to a file in binary format */
26: /* ---------------------------------------------------------------------- */
28: /* Allocate array and set values */
29: PetscMalloc(m*sizeof(PetscScalar),&array);
30: for (i=0; i<m; i++) {
31: array[i] = i*10.0;
32: }
34: /* Open viewer for binary output */
35: PetscViewerBinaryOpen(PETSC_COMM_SELF,"input.dat",FILE_MODE_WRITE,&view_out);
36: PetscViewerBinaryGetDescriptor(view_out,&fd);
38: /* Write binary output */
39: PetscBinaryWrite(fd,&m,1,PETSC_INT,PETSC_FALSE);
40: PetscBinaryWrite(fd,array,m,PETSC_SCALAR,PETSC_FALSE);
42: /* Destroy the output viewer and work array */
43: PetscViewerDestroy(&view_out);
44: PetscFree(array);
46: /* ---------------------------------------------------------------------- */
47: /* PART 2: Read data from file and form a vector */
48: /* ---------------------------------------------------------------------- */
50: /* Open input binary viewer */
51: PetscViewerBinaryOpen(PETSC_COMM_SELF,"input.dat",FILE_MODE_READ,&view_in);
52: PetscViewerBinaryGetDescriptor(view_in,&fd);
54: /* Create vector and get pointer to data space */
55: VecCreate(PETSC_COMM_SELF,&vec);
56: VecSetSizes(vec,PETSC_DECIDE,m);
57: VecSetFromOptions(vec);
58: VecGetArray(vec,&avec);
60: /* Read data into vector */
61: PetscBinaryRead(fd,&sz,1,PETSC_INT);
62: if (sz <=0) SETERRQ(PETSC_COMM_SELF,1,"Error: Must have array length > 0");
64: PetscPrintf(PETSC_COMM_SELF,"reading data in binary from input.dat, sz =%D ...\n",sz);
65: PetscBinaryRead(fd,avec,sz,PETSC_SCALAR);
67: /* View vector */
68: VecRestoreArray(vec,&avec);
69: VecView(vec,PETSC_VIEWER_STDOUT_SELF);
71: /* Free data structures */
72: VecDestroy(&vec);
73: PetscViewerDestroy(&view_in);
74: PetscFinalize();
75: return 0;
76: }