xref: /petsc/src/sys/objects/prefix.c (revision 95452b02e12c0ee11232c7ff2b24b568a8e07e43)
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 
16*95452b02SPatrick Sanan    Notes:
17*95452b02SPatrick Sanan     if this is not called the object will use the default options database
18c5929fdfSBarry Smith 
1996a0c994SBarry Smith   Level: advanced
2096a0c994SBarry Smith 
215cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
225cec412bSBarry Smith           PetscObjectGetOptionsPrefix()
23c5929fdfSBarry Smith 
2496a0c994SBarry Smith @*/
25c5929fdfSBarry Smith PetscErrorCode  PetscObjectSetOptions(PetscObject obj,PetscOptions options)
26c5929fdfSBarry Smith {
27c5929fdfSBarry Smith   PetscFunctionBegin;
28c5929fdfSBarry Smith   PetscValidHeader(obj,1);
29c5929fdfSBarry Smith   obj->options = options;
30c5929fdfSBarry Smith   PetscFunctionReturn(0);
31c5929fdfSBarry Smith }
32c5929fdfSBarry Smith 
335cec412bSBarry Smith /*@C
34e5c89e4eSSatish Balay    PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all
35e5c89e4eSSatish Balay    options of PetscObjectType in the database.
36e5c89e4eSSatish Balay 
3796a0c994SBarry Smith    Collective on Object
3896a0c994SBarry Smith 
39e5c89e4eSSatish Balay    Input Parameters:
40e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
41e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
42e5c89e4eSSatish Balay 
43e5c89e4eSSatish Balay    Notes:
44e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
45e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
46e5c89e4eSSatish Balay    hyphen.
47e5c89e4eSSatish Balay 
48e5c89e4eSSatish Balay    Concepts: prefix^setting
49e5c89e4eSSatish Balay 
50edc382c3SSatish Balay   Level: advanced
51edc382c3SSatish Balay 
525cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
535cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSSetOptionsPrefix(), SNESSetOptionsPrefix(), KSPSetOptionsPrefix()
545cec412bSBarry Smith 
555cec412bSBarry Smith @*/
567087cfbeSBarry Smith PetscErrorCode  PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[])
57e5c89e4eSSatish Balay {
58e5c89e4eSSatish Balay   PetscErrorCode ierr;
59e5c89e4eSSatish Balay 
60e5c89e4eSSatish Balay   PetscFunctionBegin;
613cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
62e5c89e4eSSatish Balay   if (!prefix) {
63503cfb0cSBarry Smith     ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
64e5c89e4eSSatish Balay   } else {
65e32f2f54SBarry Smith     if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
664ed52fbaSBarry Smith     if (prefix != obj->prefix) {
67503cfb0cSBarry Smith       ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
68e5c89e4eSSatish Balay       ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr);
69e5c89e4eSSatish Balay     }
704ed52fbaSBarry Smith   }
71e5c89e4eSSatish Balay   PetscFunctionReturn(0);
72e5c89e4eSSatish Balay }
73e5c89e4eSSatish Balay 
745cec412bSBarry Smith /*@C
75e5c89e4eSSatish Balay    PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all
76e5c89e4eSSatish Balay    options of PetscObjectType in the database.
77e5c89e4eSSatish Balay 
78e5c89e4eSSatish Balay    Input Parameters:
79e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
80e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
81e5c89e4eSSatish Balay 
82e5c89e4eSSatish Balay    Notes:
83e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
84e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
85e5c89e4eSSatish Balay    hyphen.
86e5c89e4eSSatish Balay 
87e5c89e4eSSatish Balay    Concepts: prefix^setting
88e5c89e4eSSatish Balay 
89edc382c3SSatish Balay   Level: advanced
90edc382c3SSatish Balay 
915cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
925cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSAppendOptionsPrefix(), SNESAppendOptionsPrefix(), KSPAppendOptionsPrefix()
935cec412bSBarry Smith 
945cec412bSBarry Smith @*/
957087cfbeSBarry Smith PetscErrorCode  PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[])
96e5c89e4eSSatish Balay {
97e5c89e4eSSatish Balay   char           *buf = obj->prefix;
98e5c89e4eSSatish Balay   PetscErrorCode ierr;
99e5c89e4eSSatish Balay   size_t         len1,len2;
100e5c89e4eSSatish Balay 
101e5c89e4eSSatish Balay   PetscFunctionBegin;
1023cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
103a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
104e5c89e4eSSatish Balay   if (!buf) {
105e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
106e5c89e4eSSatish Balay     PetscFunctionReturn(0);
107e5c89e4eSSatish Balay   }
108e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
109e5c89e4eSSatish Balay 
110e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
111e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
112854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
113e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr);
114e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr);
115e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
116e5c89e4eSSatish Balay   PetscFunctionReturn(0);
117e5c89e4eSSatish Balay }
118e5c89e4eSSatish Balay 
1195cec412bSBarry Smith /*@C
120e5c89e4eSSatish Balay    PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject.
121e5c89e4eSSatish Balay 
122e5c89e4eSSatish Balay    Input Parameters:
123e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
124e5c89e4eSSatish Balay 
125e5c89e4eSSatish Balay    Output Parameters:
126e5c89e4eSSatish Balay .  prefix - pointer to the prefix string used is returned
127e5c89e4eSSatish Balay 
128e5c89e4eSSatish Balay    Concepts: prefix^getting
129e5c89e4eSSatish Balay 
130edc382c3SSatish Balay   Level: advanced
131edc382c3SSatish Balay 
1325cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
1335cec412bSBarry Smith           TSGetOptionsPrefix(), SNESGetOptionsPrefix(), KSPGetOptionsPrefix()
1345cec412bSBarry Smith 
1355cec412bSBarry Smith @*/
1367087cfbeSBarry Smith PetscErrorCode  PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[])
137e5c89e4eSSatish Balay {
138e5c89e4eSSatish Balay   PetscFunctionBegin;
1393cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1403cfa8680SLisandro Dalcin   PetscValidPointer(prefix,2);
141e5c89e4eSSatish Balay   *prefix = obj->prefix;
142e5c89e4eSSatish Balay   PetscFunctionReturn(0);
143e5c89e4eSSatish Balay }
144e5c89e4eSSatish Balay 
1455cec412bSBarry Smith /*@C
146e5c89e4eSSatish Balay    PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all
147e5c89e4eSSatish Balay    options of PetscObjectType in the database.
148e5c89e4eSSatish Balay 
149e5c89e4eSSatish Balay    Input Parameters:
150e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
151e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
152e5c89e4eSSatish Balay 
153e5c89e4eSSatish Balay    Notes:
154e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
155e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
156e5c89e4eSSatish Balay    hyphen.
157e5c89e4eSSatish Balay 
158e5c89e4eSSatish Balay    Concepts: prefix^setting
159e5c89e4eSSatish Balay 
160edc382c3SSatish Balay   Level: advanced
161edc382c3SSatish Balay 
1625cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(),
1635cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSPrependOptionsPrefix(), SNESPrependOptionsPrefix(), KSPPrependOptionsPrefix()
1645cec412bSBarry Smith 
1655cec412bSBarry Smith @*/
1667087cfbeSBarry Smith PetscErrorCode  PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[])
167e5c89e4eSSatish Balay {
1685c7534e4SLisandro Dalcin   char           *buf;
169e5c89e4eSSatish Balay   size_t         len1,len2;
1705c7534e4SLisandro Dalcin   PetscErrorCode ierr;
171e5c89e4eSSatish Balay 
172e5c89e4eSSatish Balay   PetscFunctionBegin;
1733cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1745c7534e4SLisandro Dalcin   buf = obj->prefix;
175a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
176e5c89e4eSSatish Balay   if (!buf) {
177e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
178e5c89e4eSSatish Balay     PetscFunctionReturn(0);
179e5c89e4eSSatish Balay   }
180e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
181e5c89e4eSSatish Balay 
182e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
183e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
184854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
185e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr);
186e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr);
187e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
188e5c89e4eSSatish Balay   PetscFunctionReturn(0);
189e5c89e4eSSatish Balay }
190e5c89e4eSSatish Balay 
191