xref: /petsc/include/petscbag.h (revision 9dcbbd2be7d6c63d58f4f57b80657b56043f6042)
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,&params);
30 $      ierr = PetscBagSetName(params,"MyParameters");
31 $      ierr = PetscBagRegisterInt(params,&params.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