xref: /petsc/src/sys/objects/prefix.c (revision 77591d71c804761c580de2adbe71c66e214516ef)
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:
68a2b725a8SWilliam Gropp +  obj - any PETSc object, for example a Vec, Mat or KSP.
69a2b725a8SWilliam 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 
76edc382c3SSatish Balay   Level: advanced
77edc382c3SSatish Balay 
785cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
795cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSSetOptionsPrefix(), SNESSetOptionsPrefix(), KSPSetOptionsPrefix()
805cec412bSBarry Smith 
815cec412bSBarry Smith @*/
827087cfbeSBarry Smith PetscErrorCode  PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[])
83e5c89e4eSSatish Balay {
84e5c89e4eSSatish Balay   PetscErrorCode ierr;
85e5c89e4eSSatish Balay 
86e5c89e4eSSatish Balay   PetscFunctionBegin;
873cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
88e5c89e4eSSatish Balay   if (!prefix) {
89503cfb0cSBarry Smith     ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
90e5c89e4eSSatish Balay   } else {
91e32f2f54SBarry Smith     if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
924ed52fbaSBarry Smith     if (prefix != obj->prefix) {
93503cfb0cSBarry Smith       ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
94e5c89e4eSSatish Balay       ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr);
95e5c89e4eSSatish Balay     }
964ed52fbaSBarry Smith   }
97e5c89e4eSSatish Balay   PetscFunctionReturn(0);
98e5c89e4eSSatish Balay }
99e5c89e4eSSatish Balay 
1005cec412bSBarry Smith /*@C
101e5c89e4eSSatish Balay    PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all
102e5c89e4eSSatish Balay    options of PetscObjectType in the database.
103e5c89e4eSSatish Balay 
104e5c89e4eSSatish Balay    Input Parameters:
105a2b725a8SWilliam Gropp +  obj - any PETSc object, for example a Vec, Mat or KSP.
106a2b725a8SWilliam Gropp -  prefix - the prefix string to prepend to option requests of the object.
107e5c89e4eSSatish Balay 
108e5c89e4eSSatish Balay    Notes:
109e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
110e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
111e5c89e4eSSatish Balay    hyphen.
112e5c89e4eSSatish Balay 
113edc382c3SSatish Balay   Level: advanced
114edc382c3SSatish Balay 
1155cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
1165cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSAppendOptionsPrefix(), SNESAppendOptionsPrefix(), KSPAppendOptionsPrefix()
1175cec412bSBarry Smith 
1185cec412bSBarry Smith @*/
1197087cfbeSBarry Smith PetscErrorCode  PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[])
120e5c89e4eSSatish Balay {
121e5c89e4eSSatish Balay   char           *buf = obj->prefix;
122e5c89e4eSSatish Balay   PetscErrorCode ierr;
123e5c89e4eSSatish Balay   size_t         len1,len2;
124e5c89e4eSSatish Balay 
125e5c89e4eSSatish Balay   PetscFunctionBegin;
1263cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
127a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
128e5c89e4eSSatish Balay   if (!buf) {
129e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
130e5c89e4eSSatish Balay     PetscFunctionReturn(0);
131e5c89e4eSSatish Balay   }
132e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
133e5c89e4eSSatish Balay 
134e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
135e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
136854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
137e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr);
138e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr);
139e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
140e5c89e4eSSatish Balay   PetscFunctionReturn(0);
141e5c89e4eSSatish Balay }
142e5c89e4eSSatish Balay 
1435cec412bSBarry Smith /*@C
144e5c89e4eSSatish Balay    PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject.
145e5c89e4eSSatish Balay 
146e5c89e4eSSatish Balay    Input Parameters:
147e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
148e5c89e4eSSatish Balay 
149e5c89e4eSSatish Balay    Output Parameters:
150e5c89e4eSSatish Balay .  prefix - pointer to the prefix string used is returned
151e5c89e4eSSatish Balay 
152edc382c3SSatish Balay   Level: advanced
153edc382c3SSatish Balay 
1545cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
1555cec412bSBarry Smith           TSGetOptionsPrefix(), SNESGetOptionsPrefix(), KSPGetOptionsPrefix()
1565cec412bSBarry Smith 
1575cec412bSBarry Smith @*/
1587087cfbeSBarry Smith PetscErrorCode  PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[])
159e5c89e4eSSatish Balay {
160e5c89e4eSSatish Balay   PetscFunctionBegin;
1613cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1623cfa8680SLisandro Dalcin   PetscValidPointer(prefix,2);
163e5c89e4eSSatish Balay   *prefix = obj->prefix;
164e5c89e4eSSatish Balay   PetscFunctionReturn(0);
165e5c89e4eSSatish Balay }
166e5c89e4eSSatish Balay 
1675cec412bSBarry Smith /*@C
168e5c89e4eSSatish Balay    PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all
169e5c89e4eSSatish Balay    options of PetscObjectType in the database.
170e5c89e4eSSatish Balay 
171e5c89e4eSSatish Balay    Input Parameters:
172a2b725a8SWilliam Gropp +  obj - any PETSc object, for example a Vec, Mat or KSP.
173a2b725a8SWilliam Gropp -  prefix - the prefix string to prepend to option requests of the object.
174e5c89e4eSSatish Balay 
175e5c89e4eSSatish Balay    Notes:
176e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
177e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
178e5c89e4eSSatish Balay    hyphen.
179e5c89e4eSSatish Balay 
180edc382c3SSatish Balay   Level: advanced
181edc382c3SSatish Balay 
1825cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(),
183*77591d71SPierre Jolivet           PetscObjectGetOptionsPrefix()
1845cec412bSBarry Smith 
1855cec412bSBarry Smith @*/
1867087cfbeSBarry Smith PetscErrorCode  PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[])
187e5c89e4eSSatish Balay {
1885c7534e4SLisandro Dalcin   char           *buf;
189e5c89e4eSSatish Balay   size_t         len1,len2;
1905c7534e4SLisandro Dalcin   PetscErrorCode ierr;
191e5c89e4eSSatish Balay 
192e5c89e4eSSatish Balay   PetscFunctionBegin;
1933cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1945c7534e4SLisandro Dalcin   buf = obj->prefix;
195a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
196e5c89e4eSSatish Balay   if (!buf) {
197e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
198e5c89e4eSSatish Balay     PetscFunctionReturn(0);
199e5c89e4eSSatish Balay   }
200e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
201e5c89e4eSSatish Balay 
202e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
203e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
204854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
205e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr);
206e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr);
207e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
208e5c89e4eSSatish Balay   PetscFunctionReturn(0);
209e5c89e4eSSatish Balay }
210e5c89e4eSSatish Balay 
211