xref: /petsc/src/sys/objects/prefix.c (revision a2b725a8db0d6bf6cc2a1c6df7dd8029aadfff6e)
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 
23ffc43655SBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
24ffc43655SBarry Smith           PetscObjectGetOptionsPrefix(), PetscObjectSetOptions()
25ffc43655SBarry Smith 
26ffc43655SBarry Smith @*/
27ffc43655SBarry Smith PetscErrorCode  PetscObjectGetOptions(PetscObject obj,PetscOptions *options)
28ffc43655SBarry Smith {
29ffc43655SBarry Smith   PetscFunctionBegin;
30ffc43655SBarry Smith   PetscValidHeader(obj,1);
31ffc43655SBarry Smith   *options = obj->options;
32ffc43655SBarry Smith   PetscFunctionReturn(0);
33ffc43655SBarry Smith }
34ffc43655SBarry Smith 
35ffc43655SBarry Smith /*@C
3616413a6aSBarry Smith    PetscObjectSetOptions - Sets the options database used by the object. Call immediately after creating the object.
37c5929fdfSBarry Smith 
3896a0c994SBarry Smith    Collective on PetscObject
3996a0c994SBarry Smith 
40c5929fdfSBarry Smith    Input Parameters:
41c5929fdfSBarry Smith +  obj - any PETSc object, for example a Vec, Mat or KSP.
42c5929fdfSBarry Smith -  options - the options database, use NULL for default
43c5929fdfSBarry Smith 
4495452b02SPatrick Sanan    Notes:
4595452b02SPatrick Sanan     if this is not called the object will use the default options database
46c5929fdfSBarry Smith 
4796a0c994SBarry Smith   Level: advanced
4896a0c994SBarry Smith 
495cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
50ffc43655SBarry Smith           PetscObjectGetOptionsPrefix(), PetscObjectGetOptions()
51c5929fdfSBarry Smith 
5296a0c994SBarry Smith @*/
53c5929fdfSBarry Smith PetscErrorCode  PetscObjectSetOptions(PetscObject obj,PetscOptions options)
54c5929fdfSBarry Smith {
55c5929fdfSBarry Smith   PetscFunctionBegin;
56c5929fdfSBarry Smith   PetscValidHeader(obj,1);
57c5929fdfSBarry Smith   obj->options = options;
58c5929fdfSBarry Smith   PetscFunctionReturn(0);
59c5929fdfSBarry Smith }
60c5929fdfSBarry Smith 
615cec412bSBarry Smith /*@C
62e5c89e4eSSatish Balay    PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all
63e5c89e4eSSatish Balay    options of PetscObjectType in the database.
64e5c89e4eSSatish Balay 
6596a0c994SBarry Smith    Collective on Object
6696a0c994SBarry Smith 
67e5c89e4eSSatish Balay    Input Parameters:
68*a2b725a8SWilliam Gropp +  obj - any PETSc object, for example a Vec, Mat or KSP.
69*a2b725a8SWilliam Gropp -  prefix - the prefix string to prepend to option requests of the object.
70e5c89e4eSSatish Balay 
71e5c89e4eSSatish Balay    Notes:
72e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
73e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
74e5c89e4eSSatish Balay    hyphen.
75e5c89e4eSSatish Balay 
76e5c89e4eSSatish Balay    Concepts: prefix^setting
77e5c89e4eSSatish Balay 
78edc382c3SSatish Balay   Level: advanced
79edc382c3SSatish Balay 
805cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
815cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSSetOptionsPrefix(), SNESSetOptionsPrefix(), KSPSetOptionsPrefix()
825cec412bSBarry Smith 
835cec412bSBarry Smith @*/
847087cfbeSBarry Smith PetscErrorCode  PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[])
85e5c89e4eSSatish Balay {
86e5c89e4eSSatish Balay   PetscErrorCode ierr;
87e5c89e4eSSatish Balay 
88e5c89e4eSSatish Balay   PetscFunctionBegin;
893cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
90e5c89e4eSSatish Balay   if (!prefix) {
91503cfb0cSBarry Smith     ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
92e5c89e4eSSatish Balay   } else {
93e32f2f54SBarry Smith     if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
944ed52fbaSBarry Smith     if (prefix != obj->prefix) {
95503cfb0cSBarry Smith       ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
96e5c89e4eSSatish Balay       ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr);
97e5c89e4eSSatish Balay     }
984ed52fbaSBarry Smith   }
99e5c89e4eSSatish Balay   PetscFunctionReturn(0);
100e5c89e4eSSatish Balay }
101e5c89e4eSSatish Balay 
1025cec412bSBarry Smith /*@C
103e5c89e4eSSatish Balay    PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all
104e5c89e4eSSatish Balay    options of PetscObjectType in the database.
105e5c89e4eSSatish Balay 
106e5c89e4eSSatish Balay    Input Parameters:
107*a2b725a8SWilliam Gropp +  obj - any PETSc object, for example a Vec, Mat or KSP.
108*a2b725a8SWilliam Gropp -  prefix - the prefix string to prepend to option requests of the object.
109e5c89e4eSSatish Balay 
110e5c89e4eSSatish Balay    Notes:
111e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
112e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
113e5c89e4eSSatish Balay    hyphen.
114e5c89e4eSSatish Balay 
115e5c89e4eSSatish Balay    Concepts: prefix^setting
116e5c89e4eSSatish Balay 
117edc382c3SSatish Balay   Level: advanced
118edc382c3SSatish Balay 
1195cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
1205cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSAppendOptionsPrefix(), SNESAppendOptionsPrefix(), KSPAppendOptionsPrefix()
1215cec412bSBarry Smith 
1225cec412bSBarry Smith @*/
1237087cfbeSBarry Smith PetscErrorCode  PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[])
124e5c89e4eSSatish Balay {
125e5c89e4eSSatish Balay   char           *buf = obj->prefix;
126e5c89e4eSSatish Balay   PetscErrorCode ierr;
127e5c89e4eSSatish Balay   size_t         len1,len2;
128e5c89e4eSSatish Balay 
129e5c89e4eSSatish Balay   PetscFunctionBegin;
1303cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
131a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
132e5c89e4eSSatish Balay   if (!buf) {
133e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
134e5c89e4eSSatish Balay     PetscFunctionReturn(0);
135e5c89e4eSSatish Balay   }
136e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
137e5c89e4eSSatish Balay 
138e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
139e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
140854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
141e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr);
142e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr);
143e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
144e5c89e4eSSatish Balay   PetscFunctionReturn(0);
145e5c89e4eSSatish Balay }
146e5c89e4eSSatish Balay 
1475cec412bSBarry Smith /*@C
148e5c89e4eSSatish Balay    PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject.
149e5c89e4eSSatish Balay 
150e5c89e4eSSatish Balay    Input Parameters:
151e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
152e5c89e4eSSatish Balay 
153e5c89e4eSSatish Balay    Output Parameters:
154e5c89e4eSSatish Balay .  prefix - pointer to the prefix string used is returned
155e5c89e4eSSatish Balay 
156e5c89e4eSSatish Balay    Concepts: prefix^getting
157e5c89e4eSSatish Balay 
158edc382c3SSatish Balay   Level: advanced
159edc382c3SSatish Balay 
1605cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
1615cec412bSBarry Smith           TSGetOptionsPrefix(), SNESGetOptionsPrefix(), KSPGetOptionsPrefix()
1625cec412bSBarry Smith 
1635cec412bSBarry Smith @*/
1647087cfbeSBarry Smith PetscErrorCode  PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[])
165e5c89e4eSSatish Balay {
166e5c89e4eSSatish Balay   PetscFunctionBegin;
1673cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1683cfa8680SLisandro Dalcin   PetscValidPointer(prefix,2);
169e5c89e4eSSatish Balay   *prefix = obj->prefix;
170e5c89e4eSSatish Balay   PetscFunctionReturn(0);
171e5c89e4eSSatish Balay }
172e5c89e4eSSatish Balay 
1735cec412bSBarry Smith /*@C
174e5c89e4eSSatish Balay    PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all
175e5c89e4eSSatish Balay    options of PetscObjectType in the database.
176e5c89e4eSSatish Balay 
177e5c89e4eSSatish Balay    Input Parameters:
178*a2b725a8SWilliam Gropp +  obj - any PETSc object, for example a Vec, Mat or KSP.
179*a2b725a8SWilliam Gropp -  prefix - the prefix string to prepend to option requests of the object.
180e5c89e4eSSatish Balay 
181e5c89e4eSSatish Balay    Notes:
182e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
183e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
184e5c89e4eSSatish Balay    hyphen.
185e5c89e4eSSatish Balay 
186e5c89e4eSSatish Balay    Concepts: prefix^setting
187e5c89e4eSSatish Balay 
188edc382c3SSatish Balay   Level: advanced
189edc382c3SSatish Balay 
1905cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(),
1915cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSPrependOptionsPrefix(), SNESPrependOptionsPrefix(), KSPPrependOptionsPrefix()
1925cec412bSBarry Smith 
1935cec412bSBarry Smith @*/
1947087cfbeSBarry Smith PetscErrorCode  PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[])
195e5c89e4eSSatish Balay {
1965c7534e4SLisandro Dalcin   char           *buf;
197e5c89e4eSSatish Balay   size_t         len1,len2;
1985c7534e4SLisandro Dalcin   PetscErrorCode ierr;
199e5c89e4eSSatish Balay 
200e5c89e4eSSatish Balay   PetscFunctionBegin;
2013cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
2025c7534e4SLisandro Dalcin   buf = obj->prefix;
203a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
204e5c89e4eSSatish Balay   if (!buf) {
205e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
206e5c89e4eSSatish Balay     PetscFunctionReturn(0);
207e5c89e4eSSatish Balay   }
208e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
209e5c89e4eSSatish Balay 
210e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
211e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
212854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
213e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr);
214e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr);
215e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
216e5c89e4eSSatish Balay   PetscFunctionReturn(0);
217e5c89e4eSSatish Balay }
218e5c89e4eSSatish Balay 
219