Actual source code: viewreg.c

  2: #include "src/sys/src/viewer/viewerimpl.h"  /*I "petsc.h" I*/  

  4: PetscFList PetscViewerList              = 0;

  8: /*@C
  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;

 33:   *inviewer = 0;
 34:   PetscHeaderCreate(viewer,_p_PetscViewer,struct _PetscViewerOps,PETSC_VIEWER_COOKIE,-1,"PetscViewer",comm,PetscViewerDestroy,0);
 35:   PetscLogObjectCreate(viewer);
 36:   *inviewer           = viewer;
 37:   viewer->data        = 0;
 38:   return(0);
 39: }
 40: 
 43: /*@C
 44:    PetscViewerSetType - Builds PetscViewer for a particular implementation.

 46:    Collective on PetscViewer

 48:    Input Parameter:
 49: +  viewer      - the PetscViewer context
 50: -  type        - for example, "ASCII"

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

 56:    Level: advanced

 58:    Notes:  
 59:    See "include/petscviewer.h" for available methods (for instance,
 60:    PETSC_VIEWER_SOCKET)

 62: .seealso: PetscViewerCreate(), PetscViewerGetType()
 63: @*/
 64: PetscErrorCode PetscViewerSetType(PetscViewer viewer,const PetscViewerType type)
 65: {
 66:   PetscErrorCode ierr,(*r)(PetscViewer);
 67:   PetscTruth     match;


 73:   PetscTypeCompare((PetscObject)viewer,type,&match);
 74:   if (match) return(0);

 76:   if (viewer->data) {
 77:     /* destroy the old private PetscViewer context */
 78:     (*viewer->ops->destroy)(viewer);
 79:     viewer->data      = 0;
 80:   }
 81:   /* Get the function pointers for the graphics method requested */
 82:   if (!PetscViewerList) {
 83:     PetscViewerRegisterAll(PETSC_NULL);
 84:   }

 86:    PetscFListFind(viewer->comm,PetscViewerList,type,(void (**)(void)) &r);
 87:   if (!r) SETERRQ1(PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown PetscViewer type given: %s",type);
 88:   viewer->data        = 0;
 89:   PetscMemzero(viewer->ops,sizeof(struct _PetscViewerOps));
 90:   (*r)(viewer);
 91:   PetscObjectChangeTypeName((PetscObject)viewer,type);
 92:   return(0);
 93: }

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

101:    Not Collective

103:    Level: developer

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

112:   if (PetscViewerList) {
113:     PetscFListDestroy(&PetscViewerList);
114:     PetscViewerList = 0;
115:   }
116:   return(0);
117: }

121: PetscErrorCode PetscViewerRegister(const char *sname,const char *path,const char *name,PetscErrorCode (*function)(PetscViewer))
122: {
124:   char fullname[PETSC_MAX_PATH_LEN];

127:   PetscFListConcat(path,name,fullname);
128:   PetscFListAdd(&PetscViewerList,sname,fullname,(void (*)(void))function);
129:   return(0);
130: }

134: /*@C
135:    PetscViewerSetFromOptions - Sets the graphics type from the options database.
136:       Defaults to a PETSc X windows graphics.

138:    Collective on PetscViewer

140:    Input Parameter:
141: .     PetscViewer - the graphics context

143:    Level: intermediate

145:    Notes: 
146:     Must be called after PetscViewerCreate() before the PetscViewer is used.

148:   Concepts: PetscViewer^setting options

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

152: @*/
153: PetscErrorCode PetscViewerSetFromOptions(PetscViewer viewer)
154: {
156:   char       vtype[256];
157:   PetscTruth flg;


162:   if (!PetscViewerList) {
163:     PetscViewerRegisterAll(PETSC_NULL);
164:   }
165:   PetscOptionsBegin(viewer->comm,viewer->prefix,"PetscViewer options","PetscViewer");
166:     PetscOptionsList("-viewer_type","Type of PetscViewer","None",PetscViewerList,(char *)(viewer->type_name?viewer->type_name:PETSC_VIEWER_ASCII),vtype,256,&flg);
167:     if (flg) {
168:       PetscViewerSetType(viewer,vtype);
169:     }
170:     /* type has not been set? */
171:     if (!viewer->type_name) {
172:       PetscViewerSetType(viewer,PETSC_VIEWER_ASCII);
173:     }
174:     if (viewer->ops->setfromoptions) {
175:       (*viewer->ops->setfromoptions)(viewer);
176:     }
177:   PetscOptionsEnd();

179:   return(0);
180: }