Actual source code: viewreg.c

  2: #include <private/viewerimpl.h>  /*I "petscsys.h" I*/  

  4: PetscFList PetscViewerList              = 0;

  8: /*@
  9:    PetscViewerCreate - Creates a viewing context

 11:    Collective on MPI_Comm

 13:    Input Parameter:
 14: .  comm - MPI communicator

 16:    Output Parameter:
 17: .  inviewer - location to put the PetscViewer context

 19:    Level: advanced

 21:    Concepts: graphics^creating PetscViewer
 22:    Concepts: file input/output^creating PetscViewer
 23:    Concepts: sockets^creating PetscViewer

 25: .seealso: PetscViewerDestroy(), PetscViewerSetType()

 27: @*/
 28: PetscErrorCode  PetscViewerCreate(MPI_Comm comm,PetscViewer *inviewer)
 29: {
 30:   PetscViewer    viewer;

 34:   *inviewer = 0;
 35: #if !defined(PETSC_USE_DYNAMIC_LIBRARIES)
 36:   PetscViewerInitializePackage(PETSC_NULL);
 37: #endif
 38:   PetscHeaderCreate(viewer,_p_PetscViewer,struct _PetscViewerOps,PETSC_VIEWER_CLASSID,-1,"PetscViewer","PetscViewer","Viewer",comm,PetscViewerDestroy,0);
 39:   *inviewer           = viewer;
 40:   viewer->data        = 0;
 41:   return(0);
 42: }
 43: 
 46: /*@C
 47:    PetscViewerSetType - Builds PetscViewer for a particular implementation.

 49:    Collective on PetscViewer

 51:    Input Parameter:
 52: +  viewer      - the PetscViewer context
 53: -  type        - for example, "ASCII"

 55:    Options Database Command:
 56: .  -draw_type  <type> - Sets the type; use -help for a list 
 57:     of available methods (for instance, ascii)

 59:    Level: advanced

 61:    Notes:  
 62:    See "include/petscviewer.h" for available methods (for instance,
 63:    PETSC_VIEWER_SOCKET)

 65: .seealso: PetscViewerCreate(), PetscViewerGetType()
 66: @*/
 67: PetscErrorCode  PetscViewerSetType(PetscViewer viewer,const PetscViewerType type)
 68: {
 69:   PetscErrorCode ierr,(*r)(PetscViewer);
 70:   PetscBool      match;

 75:   CHKMEMQ;
 76:   PetscTypeCompare((PetscObject)viewer,type,&match);
 77:   if (match) return(0);

 79:   /* cleanup any old type that may be there */
 80:   if (viewer->data) {
 81:     (*viewer->ops->destroy)(viewer);
 82:     viewer->data = 0;
 83:   }
 84:   PetscMemzero(viewer->ops,sizeof(struct _PetscViewerOps));

 86:    PetscFListFind(PetscViewerList,((PetscObject)viewer)->comm,type,PETSC_TRUE,(void (**)(void)) &r);
 87:   if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown PetscViewer type given: %s",type);

 89:   PetscObjectChangeTypeName((PetscObject)viewer,type);
 90:   (*r)(viewer);
 91:   return(0);
 92: }

 96: /*@C
 97:    PetscViewerRegisterDestroy - Frees the list of PetscViewer methods that were
 98:    registered by PetscViewerRegisterDynamic().

100:    Not Collective

102:    Level: developer

104: .seealso: PetscViewerRegisterDynamic(), PetscViewerRegisterAll()
105: @*/
106: PetscErrorCode  PetscViewerRegisterDestroy(void)
107: {

111:   PetscFListDestroy(&PetscViewerList);
112:   return(0);
113: }

117: PetscErrorCode  PetscViewerRegister(const char *sname,const char *path,const char *name,PetscErrorCode (*function)(PetscViewer))
118: {
120:   char fullname[PETSC_MAX_PATH_LEN];

123:   PetscFListConcat(path,name,fullname);
124:   PetscFListAdd(&PetscViewerList,sname,fullname,(void (*)(void))function);
125:   return(0);
126: }

130: /*@C
131:    PetscViewerSetFromOptions - Sets the graphics type from the options database.
132:       Defaults to a PETSc X windows graphics.

134:    Collective on PetscViewer

136:    Input Parameter:
137: .     PetscViewer - the graphics context

139:    Level: intermediate

141:    Notes: 
142:     Must be called after PetscViewerCreate() before the PetscViewer is used.

144:   Concepts: PetscViewer^setting options

146: .seealso: PetscViewerCreate(), PetscViewerSetType()

148: @*/
149: PetscErrorCode  PetscViewerSetFromOptions(PetscViewer viewer)
150: {
152:   char       vtype[256];
153:   PetscBool  flg;


158:   if (!PetscViewerList) {
159:     PetscViewerRegisterAll(PETSC_NULL);
160:   }
161:   PetscObjectOptionsBegin((PetscObject)viewer);
162:     PetscOptionsList("-viewer_type","Type of PetscViewer","None",PetscViewerList,(char *)(((PetscObject)viewer)->type_name?((PetscObject)viewer)->type_name:PETSCVIEWERASCII),vtype,256,&flg);
163:     if (flg) {
164:       PetscViewerSetType(viewer,vtype);
165:     }
166:     /* type has not been set? */
167:     if (!((PetscObject)viewer)->type_name) {
168:       PetscViewerSetType(viewer,PETSCVIEWERASCII);
169:     }
170:     if (viewer->ops->setfromoptions) {
171:       (*viewer->ops->setfromoptions)(viewer);
172:     }

174:     /* process any options handlers added with PetscObjectAddOptionsHandler() */
175:     PetscObjectProcessOptionsHandlers((PetscObject)viewer);
176:   PetscOptionsEnd();

178:   return(0);
179: }