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