xref: /petsc/src/sys/objects/prefix.c (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
17d0a6c19SBarry Smith 
2e5c89e4eSSatish Balay /*
3e5c89e4eSSatish Balay      Provides utility routines for manulating any type of PETSc object.
4e5c89e4eSSatish Balay */
5af0996ceSBarry Smith #include <petsc/private/petscimpl.h> /*I   "petscsys.h"    I*/
6e5c89e4eSSatish Balay 
7c5929fdfSBarry Smith /*@C
8ffc43655SBarry Smith    PetscObjectGetOptions - Gets the options database used by the object. Call immediately after creating the object.
9ffc43655SBarry Smith 
10ffc43655SBarry Smith    Collective on PetscObject
11ffc43655SBarry Smith 
12ffc43655SBarry Smith    Input Parameter:
13ffc43655SBarry Smith .  obj - any PETSc object, for example a Vec, Mat or KSP.
14ffc43655SBarry Smith 
15ffc43655SBarry Smith    Output Parameter:
16ffc43655SBarry Smith .  options - the options database
17ffc43655SBarry Smith 
18ffc43655SBarry Smith    Notes:
19ffc43655SBarry Smith     if this is not called the object will use the default options database
20ffc43655SBarry Smith 
21ffc43655SBarry Smith   Level: advanced
22ffc43655SBarry Smith 
23db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectSetOptionsPrefix()`, `PetscObjectAppendOptionsPrefix()`, `PetscObjectPrependOptionsPrefix()`,
24db781477SPatrick Sanan           `PetscObjectGetOptionsPrefix()`, `PetscObjectSetOptions()`
25ffc43655SBarry Smith 
26ffc43655SBarry Smith @*/
27*9371c9d4SSatish Balay PetscErrorCode PetscObjectGetOptions(PetscObject obj, PetscOptions *options) {
28ffc43655SBarry Smith   PetscFunctionBegin;
29ffc43655SBarry Smith   PetscValidHeader(obj, 1);
30ffc43655SBarry Smith   *options = obj->options;
31ffc43655SBarry Smith   PetscFunctionReturn(0);
32ffc43655SBarry Smith }
33ffc43655SBarry Smith 
34ffc43655SBarry Smith /*@C
3516413a6aSBarry Smith    PetscObjectSetOptions - Sets the options database used by the object. Call immediately after creating the object.
36c5929fdfSBarry Smith 
3796a0c994SBarry Smith    Collective on PetscObject
3896a0c994SBarry Smith 
39c5929fdfSBarry Smith    Input Parameters:
40c5929fdfSBarry Smith +  obj - any PETSc object, for example a Vec, Mat or KSP.
41c5929fdfSBarry Smith -  options - the options database, use NULL for default
42c5929fdfSBarry Smith 
4395452b02SPatrick Sanan    Notes:
4495452b02SPatrick Sanan     if this is not called the object will use the default options database
45c5929fdfSBarry Smith 
4696a0c994SBarry Smith   Level: advanced
4796a0c994SBarry Smith 
48db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectSetOptionsPrefix()`, `PetscObjectAppendOptionsPrefix()`, `PetscObjectPrependOptionsPrefix()`,
49db781477SPatrick Sanan           `PetscObjectGetOptionsPrefix()`, `PetscObjectGetOptions()`
50c5929fdfSBarry Smith 
5196a0c994SBarry Smith @*/
52*9371c9d4SSatish Balay PetscErrorCode PetscObjectSetOptions(PetscObject obj, PetscOptions options) {
53c5929fdfSBarry Smith   PetscFunctionBegin;
54c5929fdfSBarry Smith   PetscValidHeader(obj, 1);
55c5929fdfSBarry Smith   obj->options = options;
56c5929fdfSBarry Smith   PetscFunctionReturn(0);
57c5929fdfSBarry Smith }
58c5929fdfSBarry Smith 
595cec412bSBarry Smith /*@C
60e5c89e4eSSatish Balay    PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all
61e5c89e4eSSatish Balay    options of PetscObjectType in the database.
62e5c89e4eSSatish Balay 
6396a0c994SBarry Smith    Collective on Object
6496a0c994SBarry Smith 
65e5c89e4eSSatish Balay    Input Parameters:
66a2b725a8SWilliam Gropp +  obj - any PETSc object, for example a Vec, Mat or KSP.
67a2b725a8SWilliam Gropp -  prefix - the prefix string to prepend to option requests of the object.
68e5c89e4eSSatish Balay 
69e5c89e4eSSatish Balay    Notes:
70e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
71e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
72e5c89e4eSSatish Balay    hyphen.
73e5c89e4eSSatish Balay 
74edc382c3SSatish Balay   Level: advanced
75edc382c3SSatish Balay 
76db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectAppendOptionsPrefix()`, `PetscObjectPrependOptionsPrefix()`,
77db781477SPatrick Sanan           `PetscObjectGetOptionsPrefix()`, `TSSetOptionsPrefix()`, `SNESSetOptionsPrefix()`, `KSPSetOptionsPrefix()`
785cec412bSBarry Smith 
795cec412bSBarry Smith @*/
80*9371c9d4SSatish Balay PetscErrorCode PetscObjectSetOptionsPrefix(PetscObject obj, const char prefix[]) {
81e5c89e4eSSatish Balay   PetscFunctionBegin;
823cfa8680SLisandro Dalcin   PetscValidHeader(obj, 1);
835f80ce2aSJacob Faibussowitsch   if (prefix) {
845f80ce2aSJacob Faibussowitsch     PetscValidCharPointer(prefix, 2);
855f80ce2aSJacob Faibussowitsch     PetscCheck(prefix[0] != '-', PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Options prefix should not begin with a hyphen");
864ed52fbaSBarry Smith     if (prefix != obj->prefix) {
879566063dSJacob Faibussowitsch       PetscCall(PetscFree(obj->prefix));
889566063dSJacob Faibussowitsch       PetscCall(PetscStrallocpy(prefix, &obj->prefix));
89e5c89e4eSSatish Balay     }
909566063dSJacob Faibussowitsch   } else PetscCall(PetscFree(obj->prefix));
91e5c89e4eSSatish Balay   PetscFunctionReturn(0);
92e5c89e4eSSatish Balay }
93e5c89e4eSSatish Balay 
945cec412bSBarry Smith /*@C
9582b5ce2aSStefano Zampini    PetscObjectAppendOptionsPrefix - Appends to the prefix used for searching for all
96e5c89e4eSSatish Balay    options of PetscObjectType in the database.
97e5c89e4eSSatish Balay 
98e5c89e4eSSatish Balay    Input Parameters:
99a2b725a8SWilliam Gropp +  obj - any PETSc object, for example a Vec, Mat or KSP.
100a2b725a8SWilliam Gropp -  prefix - the prefix string to prepend to option requests of the object.
101e5c89e4eSSatish Balay 
102e5c89e4eSSatish Balay    Notes:
103e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
104e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
105e5c89e4eSSatish Balay    hyphen.
106e5c89e4eSSatish Balay 
107edc382c3SSatish Balay   Level: advanced
108edc382c3SSatish Balay 
109db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectSetOptionsPrefix()`, `PetscObjectPrependOptionsPrefix()`,
110db781477SPatrick Sanan           `PetscObjectGetOptionsPrefix()`, `TSAppendOptionsPrefix()`, `SNESAppendOptionsPrefix()`, `KSPAppendOptionsPrefix()`
1115cec412bSBarry Smith 
1125cec412bSBarry Smith @*/
113*9371c9d4SSatish Balay PetscErrorCode PetscObjectAppendOptionsPrefix(PetscObject obj, const char prefix[]) {
114e5c89e4eSSatish Balay   char  *buf = obj->prefix;
115e5c89e4eSSatish Balay   size_t len1, len2;
116e5c89e4eSSatish Balay 
117e5c89e4eSSatish Balay   PetscFunctionBegin;
1183cfa8680SLisandro Dalcin   PetscValidHeader(obj, 1);
119a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
120e5c89e4eSSatish Balay   if (!buf) {
1219566063dSJacob Faibussowitsch     PetscCall(PetscObjectSetOptionsPrefix(obj, prefix));
122e5c89e4eSSatish Balay     PetscFunctionReturn(0);
123e5c89e4eSSatish Balay   }
124cc73adaaSBarry Smith   PetscCheck(prefix[0] != '-', PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Options prefix should not begin with a hyphen");
125e5c89e4eSSatish Balay 
1269566063dSJacob Faibussowitsch   PetscCall(PetscStrlen(prefix, &len1));
1279566063dSJacob Faibussowitsch   PetscCall(PetscStrlen(buf, &len2));
1289566063dSJacob Faibussowitsch   PetscCall(PetscMalloc1(1 + len1 + len2, &obj->prefix));
1299566063dSJacob Faibussowitsch   PetscCall(PetscStrcpy(obj->prefix, buf));
1309566063dSJacob Faibussowitsch   PetscCall(PetscStrcat(obj->prefix, prefix));
1319566063dSJacob Faibussowitsch   PetscCall(PetscFree(buf));
132e5c89e4eSSatish Balay   PetscFunctionReturn(0);
133e5c89e4eSSatish Balay }
134e5c89e4eSSatish Balay 
1355cec412bSBarry Smith /*@C
136e5c89e4eSSatish Balay    PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject.
137e5c89e4eSSatish Balay 
138e5c89e4eSSatish Balay    Input Parameters:
139e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
140e5c89e4eSSatish Balay 
141e5c89e4eSSatish Balay    Output Parameters:
142e5c89e4eSSatish Balay .  prefix - pointer to the prefix string used is returned
143e5c89e4eSSatish Balay 
144edc382c3SSatish Balay   Level: advanced
145edc382c3SSatish Balay 
146db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectSetOptionsPrefix()`, `PetscObjectAppendOptionsPrefix()`, `PetscObjectPrependOptionsPrefix()`,
147db781477SPatrick Sanan           `TSGetOptionsPrefix()`, `SNESGetOptionsPrefix()`, `KSPGetOptionsPrefix()`
1485cec412bSBarry Smith 
1495cec412bSBarry Smith @*/
150*9371c9d4SSatish Balay PetscErrorCode PetscObjectGetOptionsPrefix(PetscObject obj, const char *prefix[]) {
151e5c89e4eSSatish Balay   PetscFunctionBegin;
1523cfa8680SLisandro Dalcin   PetscValidHeader(obj, 1);
1533cfa8680SLisandro Dalcin   PetscValidPointer(prefix, 2);
154e5c89e4eSSatish Balay   *prefix = obj->prefix;
155e5c89e4eSSatish Balay   PetscFunctionReturn(0);
156e5c89e4eSSatish Balay }
157e5c89e4eSSatish Balay 
1585cec412bSBarry Smith /*@C
159e5c89e4eSSatish Balay    PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all
160e5c89e4eSSatish Balay    options of PetscObjectType in the database.
161e5c89e4eSSatish Balay 
162e5c89e4eSSatish Balay    Input Parameters:
163a2b725a8SWilliam Gropp +  obj - any PETSc object, for example a Vec, Mat or KSP.
164a2b725a8SWilliam Gropp -  prefix - the prefix string to prepend to option requests of the object.
165e5c89e4eSSatish Balay 
166e5c89e4eSSatish Balay    Notes:
167e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
168e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
169e5c89e4eSSatish Balay    hyphen.
170e5c89e4eSSatish Balay 
171edc382c3SSatish Balay   Level: advanced
172edc382c3SSatish Balay 
173db781477SPatrick Sanan .seealso: `PetscOptionsCreate()`, `PetscOptionsDestroy()`, `PetscObjectSetOptionsPrefix()`, `PetscObjectAppendOptionsPrefix()`,
174db781477SPatrick Sanan           `PetscObjectGetOptionsPrefix()`
1755cec412bSBarry Smith 
1765cec412bSBarry Smith @*/
177*9371c9d4SSatish Balay PetscErrorCode PetscObjectPrependOptionsPrefix(PetscObject obj, const char prefix[]) {
1785c7534e4SLisandro Dalcin   char  *buf;
179e5c89e4eSSatish Balay   size_t len1, len2;
180e5c89e4eSSatish Balay 
181e5c89e4eSSatish Balay   PetscFunctionBegin;
1823cfa8680SLisandro Dalcin   PetscValidHeader(obj, 1);
1835c7534e4SLisandro Dalcin   buf = obj->prefix;
184a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
185e5c89e4eSSatish Balay   if (!buf) {
1869566063dSJacob Faibussowitsch     PetscCall(PetscObjectSetOptionsPrefix(obj, prefix));
187e5c89e4eSSatish Balay     PetscFunctionReturn(0);
188e5c89e4eSSatish Balay   }
189cc73adaaSBarry Smith   PetscCheck(prefix[0] != '-', PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Options prefix should not begin with a hyphen");
190e5c89e4eSSatish Balay 
1919566063dSJacob Faibussowitsch   PetscCall(PetscStrlen(prefix, &len1));
1929566063dSJacob Faibussowitsch   PetscCall(PetscStrlen(buf, &len2));
1939566063dSJacob Faibussowitsch   PetscCall(PetscMalloc1(1 + len1 + len2, &obj->prefix));
1949566063dSJacob Faibussowitsch   PetscCall(PetscStrcpy(obj->prefix, prefix));
1959566063dSJacob Faibussowitsch   PetscCall(PetscStrcat(obj->prefix, buf));
1969566063dSJacob Faibussowitsch   PetscCall(PetscFree(buf));
197e5c89e4eSSatish Balay   PetscFunctionReturn(0);
198e5c89e4eSSatish Balay }
199