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: }