Actual source code: viewreg.c

  1: #define PETSC_DLL

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

  5: PetscFList PetscViewerList              = 0;

  9: /*@C
 10:    PetscViewerCreate - Creates a viewing context

 12:    Collective on MPI_Comm

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

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

 20:    Level: advanced

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

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

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

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

 50:    Collective on PetscViewer

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

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

 60:    Level: advanced

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

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

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

 80:   if (viewer->data) {
 81:     /* destroy the old private PetscViewer context */
 82:     (*viewer->ops->destroy)(viewer);
 83:     viewer->data      = 0;
 84:   }
 85:   CHKMEMQ;
 86:   /* Get the function pointers for the graphics method requested */
 87:   if (!PetscViewerList) {
 88:     PetscViewerRegisterAll(PETSC_NULL);
 89:   }
 90:   CHKMEMQ;
 91:    PetscFListFind(viewer->comm,PetscViewerList,type,(void (**)(void)) &r);
 92:   if (!r) SETERRQ1(PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown PetscViewer type given: %s",type);
 93:   viewer->data        = 0;
 94:   CHKMEMQ;
 95:   PetscMemzero(viewer->ops,sizeof(struct _PetscViewerOps));
 96:   CHKMEMQ;
 97:   (*r)(viewer);
 98:   CHKMEMQ;
 99:   PetscObjectChangeTypeName((PetscObject)viewer,type);
100:   return(0);
101: }

105: /*@C
106:    PetscViewerRegisterDestroy - Frees the list of PetscViewer methods that were
107:    registered by PetscViewerRegisterDynamic().

109:    Not Collective

111:    Level: developer

113: .seealso: PetscViewerRegisterDynamic(), PetscViewerRegisterAll()
114: @*/
115: PetscErrorCode  PetscViewerRegisterDestroy(void)
116: {

120:   if (PetscViewerList) {
121:     PetscFListDestroy(&PetscViewerList);
122:     PetscViewerList = 0;
123:   }
124:   return(0);
125: }

129: PetscErrorCode  PetscViewerRegister(const char *sname,const char *path,const char *name,PetscErrorCode (*function)(PetscViewer))
130: {
132:   char fullname[PETSC_MAX_PATH_LEN];

135:   PetscFListConcat(path,name,fullname);
136:   PetscFListAdd(&PetscViewerList,sname,fullname,(void (*)(void))function);
137:   return(0);
138: }

142: /*@C
143:    PetscViewerSetFromOptions - Sets the graphics type from the options database.
144:       Defaults to a PETSc X windows graphics.

146:    Collective on PetscViewer

148:    Input Parameter:
149: .     PetscViewer - the graphics context

151:    Level: intermediate

153:    Notes: 
154:     Must be called after PetscViewerCreate() before the PetscViewer is used.

156:   Concepts: PetscViewer^setting options

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

160: @*/
161: PetscErrorCode  PetscViewerSetFromOptions(PetscViewer viewer)
162: {
164:   char       vtype[256];
165:   PetscTruth flg;


170:   if (!PetscViewerList) {
171:     PetscViewerRegisterAll(PETSC_NULL);
172:   }
173:   PetscOptionsBegin(viewer->comm,viewer->prefix,"PetscViewer options","PetscViewer");
174:     PetscOptionsList("-viewer_type","Type of PetscViewer","None",PetscViewerList,(char *)(viewer->type_name?viewer->type_name:PETSC_VIEWER_ASCII),vtype,256,&flg);
175:     if (flg) {
176:       PetscViewerSetType(viewer,vtype);
177:     }
178:     /* type has not been set? */
179:     if (!viewer->type_name) {
180:       PetscViewerSetType(viewer,PETSC_VIEWER_ASCII);
181:     }
182:     if (viewer->ops->setfromoptions) {
183:       (*viewer->ops->setfromoptions)(viewer);
184:     }
185:   PetscOptionsEnd();

187:   return(0);
188: }