xref: /petsc/src/sys/objects/prefix.c (revision edc382c3e76e5652d4718d1c0a655d58b70c62d1)
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
8c5929fdfSBarry Smith    PetscObjectSetOptions - Sets the options database used by the object
9c5929fdfSBarry Smith 
1096a0c994SBarry Smith    Collective on PetscObject
1196a0c994SBarry Smith 
12c5929fdfSBarry Smith    Input Parameters:
13c5929fdfSBarry Smith +  obj - any PETSc object, for example a Vec, Mat or KSP.
14c5929fdfSBarry Smith -  options - the options database, use NULL for default
15c5929fdfSBarry Smith 
16c5929fdfSBarry Smith    Notes: if this is not called the object will use the default options database
17c5929fdfSBarry Smith 
1896a0c994SBarry Smith   Level: advanced
1996a0c994SBarry Smith 
205cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
215cec412bSBarry Smith           PetscObjectGetOptionsPrefix()
22c5929fdfSBarry Smith 
2396a0c994SBarry Smith @*/
24c5929fdfSBarry Smith PetscErrorCode  PetscObjectSetOptions(PetscObject obj,PetscOptions options)
25c5929fdfSBarry Smith {
26c5929fdfSBarry Smith   PetscFunctionBegin;
27c5929fdfSBarry Smith   PetscValidHeader(obj,1);
28c5929fdfSBarry Smith   obj->options = options;
29c5929fdfSBarry Smith   PetscFunctionReturn(0);
30c5929fdfSBarry Smith }
31c5929fdfSBarry Smith 
325cec412bSBarry Smith /*@C
33e5c89e4eSSatish Balay    PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all
34e5c89e4eSSatish Balay    options of PetscObjectType in the database.
35e5c89e4eSSatish Balay 
3696a0c994SBarry Smith    Collective on Object
3796a0c994SBarry Smith 
38e5c89e4eSSatish Balay    Input Parameters:
39e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
40e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
41e5c89e4eSSatish Balay 
42e5c89e4eSSatish Balay    Notes:
43e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
44e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
45e5c89e4eSSatish Balay    hyphen.
46e5c89e4eSSatish Balay 
47e5c89e4eSSatish Balay    Concepts: prefix^setting
48e5c89e4eSSatish Balay 
49*edc382c3SSatish Balay   Level: advanced
50*edc382c3SSatish Balay 
515cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
525cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSSetOptionsPrefix(), SNESSetOptionsPrefix(), KSPSetOptionsPrefix()
535cec412bSBarry Smith 
545cec412bSBarry Smith @*/
557087cfbeSBarry Smith PetscErrorCode  PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[])
56e5c89e4eSSatish Balay {
57e5c89e4eSSatish Balay   PetscErrorCode ierr;
58e5c89e4eSSatish Balay 
59e5c89e4eSSatish Balay   PetscFunctionBegin;
603cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
61e5c89e4eSSatish Balay   if (!prefix) {
62503cfb0cSBarry Smith     ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
63e5c89e4eSSatish Balay   } else {
64e32f2f54SBarry Smith     if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
654ed52fbaSBarry Smith     if (prefix != obj->prefix) {
66503cfb0cSBarry Smith       ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
67e5c89e4eSSatish Balay       ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr);
68e5c89e4eSSatish Balay     }
694ed52fbaSBarry Smith   }
70e5c89e4eSSatish Balay   PetscFunctionReturn(0);
71e5c89e4eSSatish Balay }
72e5c89e4eSSatish Balay 
735cec412bSBarry Smith /*@C
74e5c89e4eSSatish Balay    PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all
75e5c89e4eSSatish Balay    options of PetscObjectType in the database.
76e5c89e4eSSatish Balay 
77e5c89e4eSSatish Balay    Input Parameters:
78e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
79e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
80e5c89e4eSSatish Balay 
81e5c89e4eSSatish Balay    Notes:
82e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
83e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
84e5c89e4eSSatish Balay    hyphen.
85e5c89e4eSSatish Balay 
86e5c89e4eSSatish Balay    Concepts: prefix^setting
87e5c89e4eSSatish Balay 
88*edc382c3SSatish Balay   Level: advanced
89*edc382c3SSatish Balay 
905cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
915cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSAppendOptionsPrefix(), SNESAppendOptionsPrefix(), KSPAppendOptionsPrefix()
925cec412bSBarry Smith 
935cec412bSBarry Smith @*/
947087cfbeSBarry Smith PetscErrorCode  PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[])
95e5c89e4eSSatish Balay {
96e5c89e4eSSatish Balay   char           *buf = obj->prefix;
97e5c89e4eSSatish Balay   PetscErrorCode ierr;
98e5c89e4eSSatish Balay   size_t         len1,len2;
99e5c89e4eSSatish Balay 
100e5c89e4eSSatish Balay   PetscFunctionBegin;
1013cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
102a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
103e5c89e4eSSatish Balay   if (!buf) {
104e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
105e5c89e4eSSatish Balay     PetscFunctionReturn(0);
106e5c89e4eSSatish Balay   }
107e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
108e5c89e4eSSatish Balay 
109e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
110e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
111854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
112e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr);
113e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr);
114e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
115e5c89e4eSSatish Balay   PetscFunctionReturn(0);
116e5c89e4eSSatish Balay }
117e5c89e4eSSatish Balay 
1185cec412bSBarry Smith /*@C
119e5c89e4eSSatish Balay    PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject.
120e5c89e4eSSatish Balay 
121e5c89e4eSSatish Balay    Input Parameters:
122e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
123e5c89e4eSSatish Balay 
124e5c89e4eSSatish Balay    Output Parameters:
125e5c89e4eSSatish Balay .  prefix - pointer to the prefix string used is returned
126e5c89e4eSSatish Balay 
127e5c89e4eSSatish Balay    Concepts: prefix^getting
128e5c89e4eSSatish Balay 
129*edc382c3SSatish Balay   Level: advanced
130*edc382c3SSatish Balay 
1315cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
1325cec412bSBarry Smith           TSGetOptionsPrefix(), SNESGetOptionsPrefix(), KSPGetOptionsPrefix()
1335cec412bSBarry Smith 
1345cec412bSBarry Smith @*/
1357087cfbeSBarry Smith PetscErrorCode  PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[])
136e5c89e4eSSatish Balay {
137e5c89e4eSSatish Balay   PetscFunctionBegin;
1383cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1393cfa8680SLisandro Dalcin   PetscValidPointer(prefix,2);
140e5c89e4eSSatish Balay   *prefix = obj->prefix;
141e5c89e4eSSatish Balay   PetscFunctionReturn(0);
142e5c89e4eSSatish Balay }
143e5c89e4eSSatish Balay 
1445cec412bSBarry Smith /*@C
145e5c89e4eSSatish Balay    PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all
146e5c89e4eSSatish Balay    options of PetscObjectType in the database.
147e5c89e4eSSatish Balay 
148e5c89e4eSSatish Balay    Input Parameters:
149e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
150e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
151e5c89e4eSSatish Balay 
152e5c89e4eSSatish Balay    Notes:
153e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
154e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
155e5c89e4eSSatish Balay    hyphen.
156e5c89e4eSSatish Balay 
157e5c89e4eSSatish Balay    Concepts: prefix^setting
158e5c89e4eSSatish Balay 
159*edc382c3SSatish Balay   Level: advanced
160*edc382c3SSatish Balay 
1615cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(),
1625cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSPrependOptionsPrefix(), SNESPrependOptionsPrefix(), KSPPrependOptionsPrefix()
1635cec412bSBarry Smith 
1645cec412bSBarry Smith @*/
1657087cfbeSBarry Smith PetscErrorCode  PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[])
166e5c89e4eSSatish Balay {
1675c7534e4SLisandro Dalcin   char           *buf;
168e5c89e4eSSatish Balay   size_t         len1,len2;
1695c7534e4SLisandro Dalcin   PetscErrorCode ierr;
170e5c89e4eSSatish Balay 
171e5c89e4eSSatish Balay   PetscFunctionBegin;
1723cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1735c7534e4SLisandro Dalcin   buf = obj->prefix;
174a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
175e5c89e4eSSatish Balay   if (!buf) {
176e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
177e5c89e4eSSatish Balay     PetscFunctionReturn(0);
178e5c89e4eSSatish Balay   }
179e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
180e5c89e4eSSatish Balay 
181e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
182e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
183854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
184e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr);
185e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr);
186e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
187e5c89e4eSSatish Balay   PetscFunctionReturn(0);
188e5c89e4eSSatish Balay }
189e5c89e4eSSatish Balay 
190