1 2 #include <petsc-private/viewerimpl.h> /*I "petscsys.h" I*/ 3 4 PetscFList PetscViewerList = 0; 5 6 #undef __FUNCT__ 7 #define __FUNCT__ "PetscViewerCreate" 8 /*@ 9 PetscViewerCreate - Creates a viewing context 10 11 Collective on MPI_Comm 12 13 Input Parameter: 14 . comm - MPI communicator 15 16 Output Parameter: 17 . inviewer - location to put the PetscViewer context 18 19 Level: advanced 20 21 Concepts: graphics^creating PetscViewer 22 Concepts: file input/output^creating PetscViewer 23 Concepts: sockets^creating PetscViewer 24 25 .seealso: PetscViewerDestroy(), PetscViewerSetType(), PetscViewerType 26 27 @*/ 28 PetscErrorCode PetscViewerCreate(MPI_Comm comm,PetscViewer *inviewer) 29 { 30 PetscViewer viewer; 31 PetscErrorCode ierr; 32 33 PetscFunctionBegin; 34 *inviewer = 0; 35 #if !defined(PETSC_USE_DYNAMIC_LIBRARIES) 36 ierr = PetscViewerInitializePackage(PETSC_NULL);CHKERRQ(ierr); 37 #endif 38 ierr = PetscHeaderCreate(viewer,_p_PetscViewer,struct _PetscViewerOps,PETSC_VIEWER_CLASSID,-1,"PetscViewer","PetscViewer","Viewer",comm,PetscViewerDestroy,0);CHKERRQ(ierr); 39 *inviewer = viewer; 40 viewer->data = 0; 41 PetscFunctionReturn(0); 42 } 43 44 #undef __FUNCT__ 45 #define __FUNCT__ "PetscViewerSetType" 46 /*@C 47 PetscViewerSetType - Builds PetscViewer for a particular implementation. 48 49 Collective on PetscViewer 50 51 Input Parameter: 52 + viewer - the PetscViewer context 53 - type - for example, "ASCII" 54 55 Options Database Command: 56 . -draw_type <type> - Sets the type; use -help for a list 57 of available methods (for instance, ascii) 58 59 Level: advanced 60 61 Notes: 62 See "include/petscviewer.h" for available methods (for instance, 63 PETSC_VIEWER_SOCKET) 64 65 .seealso: PetscViewerCreate(), PetscViewerGetType(), PetscViewerType 66 @*/ 67 PetscErrorCode PetscViewerSetType(PetscViewer viewer,PetscViewerType type) 68 { 69 PetscErrorCode ierr,(*r)(PetscViewer); 70 PetscBool match; 71 72 PetscFunctionBegin; 73 PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,1); 74 PetscValidCharPointer(type,2); 75 CHKMEMQ; 76 ierr = PetscObjectTypeCompare((PetscObject)viewer,type,&match);CHKERRQ(ierr); 77 if (match) PetscFunctionReturn(0); 78 79 /* cleanup any old type that may be there */ 80 if (viewer->data) { 81 ierr = (*viewer->ops->destroy)(viewer);CHKERRQ(ierr); 82 viewer->ops->destroy = PETSC_NULL; 83 viewer->data = 0; 84 } 85 ierr = PetscMemzero(viewer->ops,sizeof(struct _PetscViewerOps));CHKERRQ(ierr); 86 87 ierr = PetscFListFind(PetscViewerList,((PetscObject)viewer)->comm,type,PETSC_TRUE,(void (**)(void)) &r);CHKERRQ(ierr); 88 if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown PetscViewer type given: %s",type); 89 90 ierr = PetscObjectChangeTypeName((PetscObject)viewer,type);CHKERRQ(ierr); 91 ierr = (*r)(viewer);CHKERRQ(ierr); 92 PetscFunctionReturn(0); 93 } 94 95 #undef __FUNCT__ 96 #define __FUNCT__ "PetscViewerRegisterDestroy" 97 /*@C 98 PetscViewerRegisterDestroy - Frees the list of PetscViewer methods that were 99 registered by PetscViewerRegisterDynamic(). 100 101 Not Collective 102 103 Level: developer 104 105 .seealso: PetscViewerRegisterDynamic(), PetscViewerRegisterAll() 106 @*/ 107 PetscErrorCode PetscViewerRegisterDestroy(void) 108 { 109 PetscErrorCode ierr; 110 111 PetscFunctionBegin; 112 ierr = PetscFListDestroy(&PetscViewerList);CHKERRQ(ierr); 113 PetscFunctionReturn(0); 114 } 115 116 #undef __FUNCT__ 117 #define __FUNCT__ "PetscViewerRegister" 118 PetscErrorCode PetscViewerRegister(const char *sname,const char *path,const char *name,PetscErrorCode (*function)(PetscViewer)) 119 { 120 PetscErrorCode ierr; 121 char fullname[PETSC_MAX_PATH_LEN]; 122 123 PetscFunctionBegin; 124 ierr = PetscFListConcat(path,name,fullname);CHKERRQ(ierr); 125 ierr = PetscFListAdd(&PetscViewerList,sname,fullname,(void (*)(void))function);CHKERRQ(ierr); 126 PetscFunctionReturn(0); 127 } 128 129 #undef __FUNCT__ 130 #define __FUNCT__ "PetscViewerSetFromOptions" 131 /*@C 132 PetscViewerSetFromOptions - Sets the graphics type from the options database. 133 Defaults to a PETSc X windows graphics. 134 135 Collective on PetscViewer 136 137 Input Parameter: 138 . PetscViewer - the graphics context 139 140 Level: intermediate 141 142 Notes: 143 Must be called after PetscViewerCreate() before the PetscViewer is used. 144 145 Concepts: PetscViewer^setting options 146 147 .seealso: PetscViewerCreate(), PetscViewerSetType(), PetscViewerType 148 149 @*/ 150 PetscErrorCode PetscViewerSetFromOptions(PetscViewer viewer) 151 { 152 PetscErrorCode ierr; 153 char vtype[256]; 154 PetscBool flg; 155 156 PetscFunctionBegin; 157 PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,1); 158 159 if (!PetscViewerList) { 160 ierr = PetscViewerRegisterAll(PETSC_NULL);CHKERRQ(ierr); 161 } 162 ierr = PetscObjectOptionsBegin((PetscObject)viewer);CHKERRQ(ierr); 163 ierr = PetscOptionsList("-viewer_type","Type of PetscViewer","None",PetscViewerList,(char *)(((PetscObject)viewer)->type_name?((PetscObject)viewer)->type_name:PETSCVIEWERASCII),vtype,256,&flg);CHKERRQ(ierr); 164 if (flg) { 165 ierr = PetscViewerSetType(viewer,vtype);CHKERRQ(ierr); 166 } 167 /* type has not been set? */ 168 if (!((PetscObject)viewer)->type_name) { 169 ierr = PetscViewerSetType(viewer,PETSCVIEWERASCII);CHKERRQ(ierr); 170 } 171 if (viewer->ops->setfromoptions) { 172 ierr = (*viewer->ops->setfromoptions)(viewer);CHKERRQ(ierr); 173 } 174 175 /* process any options handlers added with PetscObjectAddOptionsHandler() */ 176 ierr = PetscObjectProcessOptionsHandlers((PetscObject)viewer);CHKERRQ(ierr); 177 ierr = PetscOptionsEnd();CHKERRQ(ierr); 178 179 PetscFunctionReturn(0); 180 } 181