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: int main(int argc,char **argv)
26: {
27: int ierr,bs,zero = 0,edited = 0;
28: char filename[256],string[256],*segname,*value,keyname[256],*ikeyname;
29: PetscViewer binary;
30: AOData aodata;
31: PetscTruth keyexists,flag;
33: /* ---------------------------------------------------------------------
34: Initialize PETSc
35: --------------------------------------------------------------------- */
37: PetscInitialize(&argc,&argv,(char *)0,help);
39: /*
40: Load the grid database and initialize graphics
41: */
42: /*
43: Load in the grid database
44: */
45: PetscOptionsGetString(PETSC_NULL,"-f",filename,256,&flag);
46: if (!flag) SETERRQ(1,"Unable to open database, must run with: ex1 -f filename");
47: PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,PETSC_BINARY_RDONLY,&binary);
48: AODataLoadBasic(binary,&aodata);
49: PetscViewerDestroy(binary);
51: PetscOptionsHasName(PETSC_NULL,"-d",&flag);
52: if (!flag) {
53: PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_INFO);CHKERRQ(ierr)
54: }
55: AODataView(aodata,PETSC_VIEWER_STDOUT_WORLD);
58: /*
59: Allow user to add text keys to database
60: */
61: PetscOptionsHasName(PETSC_NULL,"-e",&flag);
62: if (flag) {
63: edited = 1;
64: printf("Enter keyname: (or return to end) ");
65: fgets(string, 256, stdin);
66: while (string[0] != 0) {
67: AODataKeyExists(aodata,string,&keyexists);
68: if (!keyexists) {
69: AODataKeyAdd(aodata,string,1,1);
70: }
71: PetscStrcpy(keyname,string);
72: printf("Enter segmentname: value (or return to end) ");
73: fgets(string, 256, stdin);
74: while (string[0] != 0) {
75: PetscToken *token;
76: ierr = PetscTokenCreate(string,' ',&token);
77: ierr = PetscTokenFind(token,&segname);
78: ierr = PetscTokenFind(token,&value);
79: ierr = PetscTokenDestroy(token);
80: ierr = PetscStrlen(value,&bs);
81: AODataSegmentAdd(aodata,keyname,segname,bs,1,&zero,value,PETSC_CHAR);
82: printf("Enter segmentname: value (or return to end) ");
83: fgets(string, 256, stdin);
84: }
85: printf("Enter keyname: (or return to end) ");
86: fgets(string, 256, stdin);
87: }
88: PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_INFO);CHKERRQ(ierr)
89: AODataView(aodata,PETSC_VIEWER_STDOUT_WORLD);
90: }
92: /*
93: Allow user to remove keys and segements from database
94: */
95: PetscOptionsHasName(PETSC_NULL,"-r",&flag);
96: if (flag) {
97: edited = 1;
98: printf("Enter keyname to remove: (or return to end) ");
99: fgets(string, 256, stdin);
100: while (string[0] != 0) {
101: AODataKeyRemove(aodata,string);
102: printf("Enter keyname to remove: (or return to end) ");
103: fgets(string, 256, stdin);
104: }
105: printf("Enter keyname segment name to remove: (or return to end) ");
106: fgets(string, 256, stdin);
107: while (string[0] != 0) {
108: PetscToken *token;
109: PetscTokenCreate(string,' ',&token);
110: PetscTokenFind(token,&ikeyname);
111: PetscTokenFind(token,&segname);
112: PetscTokenDestroy(token);
113: AODataSegmentRemove(aodata,ikeyname,segname);
114: printf("Enter keyname segment name to remove: (or return to end) ");
115: fgets(string, 256, stdin);
116: }
117: PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_INFO);CHKERRQ(ierr)
118: AODataView(aodata,PETSC_VIEWER_STDOUT_WORLD);
119: }
121: if (edited) {
122: PetscStrcat(filename,".new");
123: PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,PETSC_BINARY_CREATE,&binary);
124: AODataView(aodata,binary);
125: PetscViewerDestroy(binary);
126: }
128: AODataDestroy(aodata);
131: PetscFinalize();
133: return(0);
134: }