xref: /petsc/src/sys/objects/prefix.c (revision c5929fdf3082647d199855a5c1d0286204349b03)
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 
7e5c89e4eSSatish Balay #undef __FUNCT__
8*c5929fdfSBarry Smith #define __FUNCT__ "PetscObjectSetOptions"
9*c5929fdfSBarry Smith /*@C
10*c5929fdfSBarry Smith    PetscObjectSetOptions - Sets the options database used by the object
11*c5929fdfSBarry Smith 
12*c5929fdfSBarry Smith    Input Parameters:
13*c5929fdfSBarry Smith +  obj - any PETSc object, for example a Vec, Mat or KSP.
14*c5929fdfSBarry Smith -  options - the options database, use NULL for default
15*c5929fdfSBarry Smith 
16*c5929fdfSBarry Smith    Notes: if this is not called the object will use the default options database
17*c5929fdfSBarry Smith 
18*c5929fdfSBarry Smith .seealso: PetscOptionsCreate(), PetscOptionsDestroy()
19*c5929fdfSBarry Smith 
20*c5929fdfSBarry Smith */
21*c5929fdfSBarry Smith PetscErrorCode  PetscObjectSetOptions(PetscObject obj,PetscOptions options)
22*c5929fdfSBarry Smith {
23*c5929fdfSBarry Smith   PetscFunctionBegin;
24*c5929fdfSBarry Smith   PetscValidHeader(obj,1);
25*c5929fdfSBarry Smith   obj->options = options;
26*c5929fdfSBarry Smith   PetscFunctionReturn(0);
27*c5929fdfSBarry Smith }
28*c5929fdfSBarry Smith 
29*c5929fdfSBarry Smith #undef __FUNCT__
30e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectSetOptionsPrefix"
31e5c89e4eSSatish Balay /*
32e5c89e4eSSatish Balay    PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all
33e5c89e4eSSatish Balay    options of PetscObjectType in the database.
34e5c89e4eSSatish Balay 
35e5c89e4eSSatish Balay    Input Parameters:
36e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
37e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
38e5c89e4eSSatish Balay 
39e5c89e4eSSatish Balay    Notes:
40e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
41e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
42e5c89e4eSSatish Balay    hyphen.
43e5c89e4eSSatish Balay 
44e5c89e4eSSatish Balay    Concepts: prefix^setting
45e5c89e4eSSatish Balay 
46e5c89e4eSSatish Balay */
477087cfbeSBarry Smith PetscErrorCode  PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[])
48e5c89e4eSSatish Balay {
49e5c89e4eSSatish Balay   PetscErrorCode ierr;
50e5c89e4eSSatish Balay 
51e5c89e4eSSatish Balay   PetscFunctionBegin;
523cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
53e5c89e4eSSatish Balay   if (!prefix) {
54503cfb0cSBarry Smith     ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
55e5c89e4eSSatish Balay   } else {
56e32f2f54SBarry Smith     if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
57503cfb0cSBarry Smith     ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
58e5c89e4eSSatish Balay     ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr);
59e5c89e4eSSatish Balay   }
60e5c89e4eSSatish Balay   PetscFunctionReturn(0);
61e5c89e4eSSatish Balay }
62e5c89e4eSSatish Balay 
63e5c89e4eSSatish Balay #undef __FUNCT__
64e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectAppendOptionsPrefix"
65e5c89e4eSSatish Balay /*
66e5c89e4eSSatish Balay    PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all
67e5c89e4eSSatish Balay    options of PetscObjectType in the database.
68e5c89e4eSSatish Balay 
69e5c89e4eSSatish Balay    Input Parameters:
70e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
71e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
72e5c89e4eSSatish Balay 
73e5c89e4eSSatish Balay    Notes:
74e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
75e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
76e5c89e4eSSatish Balay    hyphen.
77e5c89e4eSSatish Balay 
78e5c89e4eSSatish Balay    Concepts: prefix^setting
79e5c89e4eSSatish Balay 
80e5c89e4eSSatish Balay */
817087cfbeSBarry Smith PetscErrorCode  PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[])
82e5c89e4eSSatish Balay {
83e5c89e4eSSatish Balay   char           *buf = obj->prefix;
84e5c89e4eSSatish Balay   PetscErrorCode ierr;
85e5c89e4eSSatish Balay   size_t         len1,len2;
86e5c89e4eSSatish Balay 
87e5c89e4eSSatish Balay   PetscFunctionBegin;
883cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
89a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
90e5c89e4eSSatish Balay   if (!buf) {
91e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
92e5c89e4eSSatish Balay     PetscFunctionReturn(0);
93e5c89e4eSSatish Balay   }
94e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
95e5c89e4eSSatish Balay 
96e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
97e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
98854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
99e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr);
100e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr);
101e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
102e5c89e4eSSatish Balay   PetscFunctionReturn(0);
103e5c89e4eSSatish Balay }
104e5c89e4eSSatish Balay 
105e5c89e4eSSatish Balay #undef __FUNCT__
106e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectGetOptionsPrefix"
107e5c89e4eSSatish Balay /*
108e5c89e4eSSatish Balay    PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject.
109e5c89e4eSSatish Balay 
110e5c89e4eSSatish Balay    Input Parameters:
111e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
112e5c89e4eSSatish Balay 
113e5c89e4eSSatish Balay    Output Parameters:
114e5c89e4eSSatish Balay .  prefix - pointer to the prefix string used is returned
115e5c89e4eSSatish Balay 
116e5c89e4eSSatish Balay    Concepts: prefix^getting
117e5c89e4eSSatish Balay 
118e5c89e4eSSatish Balay */
1197087cfbeSBarry Smith PetscErrorCode  PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[])
120e5c89e4eSSatish Balay {
121e5c89e4eSSatish Balay   PetscFunctionBegin;
1223cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1233cfa8680SLisandro Dalcin   PetscValidPointer(prefix,2);
124e5c89e4eSSatish Balay   *prefix = obj->prefix;
125e5c89e4eSSatish Balay   PetscFunctionReturn(0);
126e5c89e4eSSatish Balay }
127e5c89e4eSSatish Balay 
128e5c89e4eSSatish Balay #undef __FUNCT__
129e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectPrependOptionsPrefix"
130e5c89e4eSSatish Balay /*
131e5c89e4eSSatish Balay    PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all
132e5c89e4eSSatish Balay    options of PetscObjectType in the database.
133e5c89e4eSSatish Balay 
134e5c89e4eSSatish Balay    Input Parameters:
135e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
136e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
137e5c89e4eSSatish Balay 
138e5c89e4eSSatish Balay    Notes:
139e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
140e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
141e5c89e4eSSatish Balay    hyphen.
142e5c89e4eSSatish Balay 
143e5c89e4eSSatish Balay    Concepts: prefix^setting
144e5c89e4eSSatish Balay 
145e5c89e4eSSatish Balay */
1467087cfbeSBarry Smith PetscErrorCode  PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[])
147e5c89e4eSSatish Balay {
1485c7534e4SLisandro Dalcin   char           *buf;
149e5c89e4eSSatish Balay   size_t         len1,len2;
1505c7534e4SLisandro Dalcin   PetscErrorCode ierr;
151e5c89e4eSSatish Balay 
152e5c89e4eSSatish Balay   PetscFunctionBegin;
1533cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1545c7534e4SLisandro Dalcin   buf = obj->prefix;
155a297a907SKarl Rupp   if (!prefix) PetscFunctionReturn(0);
156e5c89e4eSSatish Balay   if (!buf) {
157e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
158e5c89e4eSSatish Balay     PetscFunctionReturn(0);
159e5c89e4eSSatish Balay   }
160e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
161e5c89e4eSSatish Balay 
162e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
163e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
164854ce69bSBarry Smith   ierr = PetscMalloc1(1+len1+len2,&obj->prefix);CHKERRQ(ierr);
165e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr);
166e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr);
167e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
168e5c89e4eSSatish Balay   PetscFunctionReturn(0);
169e5c89e4eSSatish Balay }
170e5c89e4eSSatish Balay 
171