1 2 #if !defined(__PETSCBAG_H) 3 #define __PETSCBAG_H 4 #include "petsc.h" 5 PETSC_EXTERN_CXX_BEGIN 6 7 #define PETSC_BAG_NAME_LENGTH 64 8 #define PETSC_BAG_HELP_LENGTH 128 9 #define PETSC_BAG_FILE_COOKIE 1211219 10 11 typedef struct _p_PetscBagItem *PetscBagItem; 12 struct _p_PetscBagItem { 13 PetscDataType dtype; 14 PetscInt offset; 15 size_t msize; 16 char name[PETSC_BAG_NAME_LENGTH],help[PETSC_BAG_HELP_LENGTH]; 17 const char **list; 18 PetscTruth freelist; 19 PetscBagItem next;}; 20 21 /*S 22 PetscBag - PETSc object that manages a collection of user data including parameters. 23 A bag is essentially a C struct with serialization (you can save it and load it from files). 24 25 Level: beginner 26 27 Sample Usage: 28 $ typedef struct { 29 $ PetscBag bag; 30 $ PetscInt height; 31 $ PetscScalar root; 32 $ PetscReal byebye; 33 $ } MyParameters; 34 $ 35 $ MyParameters *params; 36 $ 37 $ ierr = PetscBagCreate(MyParameters,¶ms); 38 $ ierr = PetscBagSetName(params,"MyParameters"); 39 $ ierr = PetscBagRegisterInt(params,¶ms.height,22,"height","Height of the water tower"); 40 $ 41 $ 42 $ 43 $ 44 $ 45 46 .seealso: PetscBagSetName(), PetscBagGetName(), PetscBagView(), PetscBagLoad() 47 PetscBagRegisterReal(), PetscBagRegisterInt(), PetscBagRegisterTruth(), PetscBagRegisterScalar() 48 PetscBagSetFromOptions(), PetscBagRegisterVec(), PetscBagCreate(), PetscBagDestroy(), PetscBagRegisterEnum() 49 S*/ 50 typedef struct { 51 MPI_Comm bagcomm; 52 size_t bagsize; 53 PetscInt count; 54 char bagname[PETSC_BAG_NAME_LENGTH]; 55 char baghelp[PETSC_BAG_HELP_LENGTH]; 56 PetscBagItem bagitems; 57 } PetscBag; 58 59 /*MC 60 PetscBagCreate - Create a bag of values 61 62 Collective on MPI_Comm 63 64 Level: Intermediate 65 66 Synopsis: 67 PetscErrorCode PetscBagCreate(MPI_Comm comm,C struct name,PetscBag **bag); 68 69 Input Parameters: 70 + comm - communicator to share bag 71 - C struct name - name of the C structure holding the values 72 73 Output Parameter: 74 . bag - the bag of values 75 76 77 .seealso: PetscBag, PetscBagGetName(), PetscBagView(), PetscBagLoad() 78 PetscBagRegisterReal(), PetscBagRegisterInt(), PetscBagRegisterTruth(), PetscBagRegisterScalar() 79 PetscBagSetFromOptions(), PetscBagRegisterVec(), PetscBagCreate(), PetscBagDestroy(), PetscBagRegisterEnum() 80 M*/ 81 #define PetscBagCreate(C,A,B) PetscNew(A,B) || ((*(B))->bagsize = sizeof(A),(*(B))->bagcomm = C,0) 82 83 extern PetscErrorCode PetscBagDestroy(PetscBag*); 84 85 /*MC 86 PetscBagSetName - Sets the name of a bag of values 87 88 Not Collective 89 90 Level: Intermediate 91 92 Synopsis: 93 PetscErrorCode PetscBagSetName(PetscBag *bag,const char *name, const char *help); 94 95 Input Parameters: 96 + bag - the bag of values 97 . name - the name assigned to the bag 98 - help - help message for bag 99 100 .seealso: PetscBag, PetscBagGetName(), PetscBagView(), PetscBagLoad() 101 PetscBagRegisterReal(), PetscBagRegisterInt(), PetscBagRegisterTruth(), PetscBagRegisterScalar() 102 PetscBagSetFromOptions(), PetscBagRegisterVec(), PetscBagCreate(), PetscBagDestroy(), PetscBagRegisterEnum() 103 M*/ 104 #define PetscBagSetName(A,B,C) (PetscStrncpy((A)->bagname,B,PETSC_BAG_NAME_LENGTH-1) || PetscStrncpy((A)->baghelp,C,PETSC_BAG_HELP_LENGTH-1)) 105 106 /*MC 107 PetscBagGetName - Gets the name of a bag of values 108 109 Not Collective 110 111 Level: Intermediate 112 113 Synopsis: 114 PetscErrorCode PetscBagGetName(PetscBag *bag,char **name); 115 116 Input Parameter: 117 . bag - the bag of values 118 119 Output Parameter: 120 . name - the name assigned to the bag 121 122 .seealso: PetscBag, PetscBagSetName(), PetscBagView(), PetscBagLoad() 123 PetscBagRegisterReal(), PetscBagRegisterInt(), PetscBagRegisterTruth(), PetscBagRegisterScalar() 124 PetscBagSetFromOptions(), PetscBagRegisterVec(), PetscBagCreate(), PetscBagDestroy(), PetscBagRegisterEnum() 125 M*/ 126 #define PetscBagGetName(A,B) (*(B) = A->bagname,0) 127 128 extern PetscErrorCode PetscBagRegisterReal(PetscBag*,void*,PetscReal, const char*, const char*); 129 extern PetscErrorCode PetscBagRegisterString(PetscBag*,void*,size_t,const char*, const char*, const char*); 130 extern PetscErrorCode PetscBagRegisterScalar(PetscBag*,void*,PetscScalar,const char*,const char*); 131 extern PetscErrorCode PetscBagRegisterInt(PetscBag*,void*,PetscInt,const char*,const char*); 132 extern PetscErrorCode PetscBagRegisterEnum(PetscBag*,void*,const char*[],PetscEnum,const char*,const char*); 133 extern PetscErrorCode PetscBagRegisterTruth(PetscBag*,void*,PetscTruth,const char*,const char*); 134 extern PetscErrorCode PetscBagRegisterVec(PetscBag*,void*,const char*,const char*); 135 136 extern PetscErrorCode PetscBagSetFromOptions(PetscBag*); 137 138 extern PetscErrorCode PetscBagView(PetscBag*,PetscViewer); 139 extern PetscErrorCode PetscBagLoad(PetscViewer,PetscBag**); 140 141 extern PetscErrorCode PetscBagSetViewer(PetscBag*,PetscErrorCode (*)(PetscBag*,PetscViewer)); 142 extern PetscErrorCode PetscBagSetLoader(PetscBag*,PetscErrorCode (*)(PetscBag*,PetscViewer)); 143 extern PetscErrorCode PetscBagSetDestroy(PetscBag*,PetscErrorCode (*)(PetscBag*)); 144 145 #endif 146