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