Actual source code: ex1.c
1: /*$Id: ex1.c,v 1.21 2001/06/21 21:19:06 bsmith Exp $*/
3: static char help[] = "Reads an AODatabase and displays the key and segment names. Runtime options include:n
4: -f input_file : Specifies input filen
5: -d : Dumps the entire databasen
6: -e : Allows addition of character string values to the databasen
7: -r : Allows removal of items from the databasenn";
9: /*T
10: Concepts: AOData^using an AOData database for grid information;
11: Processors: n
12: T*/
14: /*
15: Include "petscao.h" so that we can use the various AO and AOData routines for
16: manipulating simple parallel databases of grid (and related) information.
17: Note that this file automatically includes:
18: petsc.h - base PETSc routines
19: petscsys.h - system routines
20: petscis.h - index sets
21: */
23: #include petscao.h
25: #undef __FUNCT__
27: int main(int argc,char **argv)
28: {
29: int ierr,bs,zero = 0,edited = 0;
30: char filename[256],string[256],*segname,*value,keyname[256],*ikeyname;
31: PetscViewer binary;
32: AOData aodata;
33: PetscTruth keyexists,flag;
35: /* ---------------------------------------------------------------------
36: Initialize PETSc
37: --------------------------------------------------------------------- */
39: PetscInitialize(&argc,&argv,(char *)0,help);
41: /*
42: Load the grid database and initialize graphics
43: */
44: /*
45: Load in the grid database
46: */
47: PetscOptionsGetString(PETSC_NULL,"-f",filename,256,&flag);
48: if (!flag) SETERRQ(1,"Unable to open database, must run with: ex1 -f filename");
49: PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,PETSC_BINARY_RDONLY,&binary);
50: AODataLoadBasic(binary,&aodata);
51: PetscViewerDestroy(binary);
53: PetscOptionsHasName(PETSC_NULL,"-d",&flag);
54: if (!flag) {
55: PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_INFO);CHKERRQ(ierr)
56: }
57: AODataView(aodata,PETSC_VIEWER_STDOUT_WORLD);
60: /*
61: Allow user to add text keys to database
62: */
63: PetscOptionsHasName(PETSC_NULL,"-e",&flag);
64: if (flag) {
65: edited = 1;
66: printf("Enter keyname: (or return to end) ");
67: fgets(string, 256, stdin);
68: while (string[0] != 0) {
69: AODataKeyExists(aodata,string,&keyexists);
70: if (!keyexists) {
71: AODataKeyAdd(aodata,string,1,1);
72: }
73: PetscStrcpy(keyname,string);
74: printf("Enter segmentname: value (or return to end) ");
75: fgets(string, 256, stdin);
76: while (string[0] != 0) {
77: PetscToken *token;
78: ierr = PetscTokenCreate(string,' ',&token);
79: ierr = PetscTokenFind(token,&segname);
80: ierr = PetscTokenFind(token,&value);
81: ierr = PetscTokenDestroy(token);
82: ierr = PetscStrlen(value,&bs);
83: AODataSegmentAdd(aodata,keyname,segname,bs,1,&zero,value,PETSC_CHAR);
84: printf("Enter segmentname: value (or return to end) ");
85: fgets(string, 256, stdin);
86: }
87: printf("Enter keyname: (or return to end) ");
88: fgets(string, 256, stdin);
89: }
90: PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_INFO);CHKERRQ(ierr)
91: AODataView(aodata,PETSC_VIEWER_STDOUT_WORLD);
92: }
94: /*
95: Allow user to remove keys and segements from database
96: */
97: PetscOptionsHasName(PETSC_NULL,"-r",&flag);
98: if (flag) {
99: edited = 1;
100: printf("Enter keyname to remove: (or return to end) ");
101: fgets(string, 256, stdin);
102: while (string[0] != 0) {
103: AODataKeyRemove(aodata,string);
104: printf("Enter keyname to remove: (or return to end) ");
105: fgets(string, 256, stdin);
106: }
107: printf("Enter keyname segment name to remove: (or return to end) ");
108: fgets(string, 256, stdin);
109: while (string[0] != 0) {
110: PetscToken *token;
111: PetscTokenCreate(string,' ',&token);
112: PetscTokenFind(token,&ikeyname);
113: PetscTokenFind(token,&segname);
114: PetscTokenDestroy(token);
115: AODataSegmentRemove(aodata,ikeyname,segname);
116: printf("Enter keyname segment name to remove: (or return to end) ");
117: fgets(string, 256, stdin);
118: }
119: PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_INFO);CHKERRQ(ierr)
120: AODataView(aodata,PETSC_VIEWER_STDOUT_WORLD);
121: }
123: if (edited) {
124: PetscStrcat(filename,".new");
125: PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,PETSC_BINARY_CREATE,&binary);
126: AODataView(aodata,binary);
127: PetscViewerDestroy(binary);
128: }
130: AODataDestroy(aodata);
133: PetscFinalize();
135: return(0);
136: }