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;char name[PETSC_BAG_NAME_LENGTH],help[PETSC_BAG_HELP_LENGTH];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() 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 Synopsis: 57 PetscErrorCode PetscBagCreate(MPI_Comm comm,C struct name,PetscBag **bag); 58 59 Input Parameters: 60 + comm - communicator to share bag 61 - C struct name - name of the C structure holding the values 62 63 Output Parameter: 64 . bag - the bag of values 65 66 .seealso: PetscBag, PetscBagGetName(), PetscBagView(), PetscBagLoad() 67 PetscBagRegisterReal(), PetscBagRegisterInt(), PetscBagRegisterTruth(), PetscBagRegisterScalar() 68 PetscBagSetFromOptions(), PetscBagRegisterVec(), PetscBagCreate(), PetscBagDestroy() 69 M*/ 70 #define PetscBagCreate(C,A,B) PetscNew(A,B) || ((*(B))->bagsize = sizeof(A),(*(B))->bagcomm = C,0) 71 72 extern PetscErrorCode PetscBagDestroy(PetscBag*); 73 74 /*MC 75 PetscBagSetName - Sets the name of a bag of values 76 77 Not Collective 78 79 Synopsis: 80 PetscErrorCode PetscBagSetName(PetscBag *bag,const char *name, const char *help); 81 82 Input Parameters: 83 + bag - the bag of values 84 . name - the name assigned to the bag 85 - help - help message for bag 86 87 .seealso: PetscBag, PetscBagGetName(), PetscBagView(), PetscBagLoad() 88 PetscBagRegisterReal(), PetscBagRegisterInt(), PetscBagRegisterTruth(), PetscBagRegisterScalar() 89 PetscBagSetFromOptions(), PetscBagRegisterVec(), PetscBagCreate(), PetscBagDestroy() 90 M*/ 91 #define PetscBagSetName(A,B,C) (PetscStrncpy((A)->bagname,B,PETSC_BAG_NAME_LENGTH-1) || PetscStrncpy((A)->baghelp,C,PETSC_BAG_HELP_LENGTH-1)) 92 93 /*MC 94 PetscBagGetName - Gets the name of a bag of values 95 96 Not Collective 97 98 Synopsis: 99 PetscErrorCode PetscBagGetName(PetscBag *bag,char **name); 100 101 Input Parameter: 102 . bag - the bag of values 103 104 Output Parameter: 105 . name - the name assigned to the bag 106 107 .seealso: PetscBag, PetscBagSetName(), PetscBagView(), PetscBagLoad() 108 PetscBagRegisterReal(), PetscBagRegisterInt(), PetscBagRegisterTruth(), PetscBagRegisterScalar() 109 PetscBagSetFromOptions(), PetscBagRegisterVec(), PetscBagCreate(), PetscBagDestroy() 110 M*/ 111 #define PetscBagGetName(A,B) (*(B) = A->bagname,0) 112 113 extern PetscErrorCode PetscBagRegisterReal(PetscBag*,void*,PetscReal, const char*, const char*); 114 extern PetscErrorCode PetscBagRegisterScalar(PetscBag*,void*,PetscScalar,const char*,const char*); 115 extern PetscErrorCode PetscBagRegisterInt(PetscBag*,void*,PetscInt,const char*,const char*); 116 extern PetscErrorCode PetscBagRegisterTruth(PetscBag*,void*,PetscTruth,const char*,const char*); 117 extern PetscErrorCode PetscBagRegisterVec(PetscBag*,void*,const char*,const char*); 118 119 extern PetscErrorCode PetscBagSetFromOptions(PetscBag*); 120 121 extern PetscErrorCode PetscBagView(PetscBag*,PetscViewer); 122 extern PetscErrorCode PetscBagLoad(PetscViewer,PetscBag**); 123 124 extern PetscErrorCode PetscBagSetViewer(PetscBag*,PetscErrorCode (*)(PetscBag*,PetscViewer)); 125 extern PetscErrorCode PetscBagSetLoader(PetscBag*,PetscErrorCode (*)(PetscBag*,PetscViewer)); 126 extern PetscErrorCode PetscBagSetDestroy(PetscBag*,PetscErrorCode (*)(PetscBag*)); 127 128 #endif 129