xref: /petsc/src/sys/objects/prefix.c (revision 5cec412b066d4067067945b74242daa28f450f61)
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 
20*5cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
21*5cec412bSBarry 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 
32*5cec412bSBarry 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*5cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
50*5cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSSetOptionsPrefix(), SNESSetOptionsPrefix(), KSPSetOptionsPrefix()
51*5cec412bSBarry Smith 
52*5cec412bSBarry Smith @*/
537087cfbeSBarry Smith PetscErrorCode  PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[])
54e5c89e4eSSatish Balay {
55e5c89e4eSSatish Balay   PetscErrorCode ierr;
56e5c89e4eSSatish Balay 
57e5c89e4eSSatish Balay   PetscFunctionBegin;
583cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
59e5c89e4eSSatish Balay   if (!prefix) {
60503cfb0cSBarry Smith     ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
61e5c89e4eSSatish Balay   } else {
62e32f2f54SBarry Smith     if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
634ed52fbaSBarry Smith     if (prefix != obj->prefix) {
64503cfb0cSBarry Smith       ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
65e5c89e4eSSatish Balay       ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr);
66e5c89e4eSSatish Balay     }
674ed52fbaSBarry Smith   }
68e5c89e4eSSatish Balay   PetscFunctionReturn(0);
69e5c89e4eSSatish Balay }
70e5c89e4eSSatish Balay 
71*5cec412bSBarry Smith /*@C
72e5c89e4eSSatish Balay    PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all
73e5c89e4eSSatish Balay    options of PetscObjectType in the database.
74e5c89e4eSSatish Balay 
75e5c89e4eSSatish Balay    Input Parameters:
76e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
77e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
78e5c89e4eSSatish Balay 
79e5c89e4eSSatish Balay    Notes:
80e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
81e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
82e5c89e4eSSatish Balay    hyphen.
83e5c89e4eSSatish Balay 
84e5c89e4eSSatish Balay    Concepts: prefix^setting
85e5c89e4eSSatish Balay 
86*5cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
87*5cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSAppendOptionsPrefix(), SNESAppendOptionsPrefix(), KSPAppendOptionsPrefix()
88*5cec412bSBarry Smith 
89*5cec412bSBarry Smith @*/
907087cfbeSBarry Smith PetscErrorCode  PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[])
91e5c89e4eSSatish Balay {
92e5c89e4eSSatish Balay   char           *buf = obj->prefix;
93e5c89e4eSSatish Balay   PetscErrorCode ierr;
94e5c89e4eSSatish Balay   size_t         len1,len2;
95e5c89e4eSSatish Balay 
96e5c89e4eSSatish Balay   PetscFunctionBegin;
973cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
98a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
99e5c89e4eSSatish Balay   if (!buf) {
100e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
101e5c89e4eSSatish Balay     PetscFunctionReturn(0);
102e5c89e4eSSatish Balay   }
103e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
104e5c89e4eSSatish Balay 
105e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
106e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
107854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
108e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr);
109e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr);
110e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
111e5c89e4eSSatish Balay   PetscFunctionReturn(0);
112e5c89e4eSSatish Balay }
113e5c89e4eSSatish Balay 
114*5cec412bSBarry Smith /*@C
115e5c89e4eSSatish Balay    PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject.
116e5c89e4eSSatish Balay 
117e5c89e4eSSatish Balay    Input Parameters:
118e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
119e5c89e4eSSatish Balay 
120e5c89e4eSSatish Balay    Output Parameters:
121e5c89e4eSSatish Balay .  prefix - pointer to the prefix string used is returned
122e5c89e4eSSatish Balay 
123e5c89e4eSSatish Balay    Concepts: prefix^getting
124e5c89e4eSSatish Balay 
125*5cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
126*5cec412bSBarry Smith           TSGetOptionsPrefix(), SNESGetOptionsPrefix(), KSPGetOptionsPrefix()
127*5cec412bSBarry Smith 
128*5cec412bSBarry Smith @*/
1297087cfbeSBarry Smith PetscErrorCode  PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[])
130e5c89e4eSSatish Balay {
131e5c89e4eSSatish Balay   PetscFunctionBegin;
1323cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1333cfa8680SLisandro Dalcin   PetscValidPointer(prefix,2);
134e5c89e4eSSatish Balay   *prefix = obj->prefix;
135e5c89e4eSSatish Balay   PetscFunctionReturn(0);
136e5c89e4eSSatish Balay }
137e5c89e4eSSatish Balay 
138*5cec412bSBarry Smith /*@C
139e5c89e4eSSatish Balay    PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all
140e5c89e4eSSatish Balay    options of PetscObjectType in the database.
141e5c89e4eSSatish Balay 
142e5c89e4eSSatish Balay    Input Parameters:
143e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
144e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
145e5c89e4eSSatish Balay 
146e5c89e4eSSatish Balay    Notes:
147e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
148e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
149e5c89e4eSSatish Balay    hyphen.
150e5c89e4eSSatish Balay 
151e5c89e4eSSatish Balay    Concepts: prefix^setting
152e5c89e4eSSatish Balay 
153*5cec412bSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(),
154*5cec412bSBarry Smith           PetscObjectGetOptionsPrefix(), TSPrependOptionsPrefix(), SNESPrependOptionsPrefix(), KSPPrependOptionsPrefix()
155*5cec412bSBarry Smith 
156*5cec412bSBarry Smith @*/
1577087cfbeSBarry Smith PetscErrorCode  PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[])
158e5c89e4eSSatish Balay {
1595c7534e4SLisandro Dalcin   char           *buf;
160e5c89e4eSSatish Balay   size_t         len1,len2;
1615c7534e4SLisandro Dalcin   PetscErrorCode ierr;
162e5c89e4eSSatish Balay 
163e5c89e4eSSatish Balay   PetscFunctionBegin;
1643cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1655c7534e4SLisandro Dalcin   buf = obj->prefix;
166a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
167e5c89e4eSSatish Balay   if (!buf) {
168e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
169e5c89e4eSSatish Balay     PetscFunctionReturn(0);
170e5c89e4eSSatish Balay   }
171e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
172e5c89e4eSSatish Balay 
173e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
174e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
175854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
176e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr);
177e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr);
178e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
179e5c89e4eSSatish Balay   PetscFunctionReturn(0);
180e5c89e4eSSatish Balay }
181e5c89e4eSSatish Balay 
182