xref: /petsc/src/sys/objects/prefix.c (revision 7d0a6c19129e7069c8a40e210b34ed62989173db)
1*7d0a6c19SBarry Smith 
2e5c89e4eSSatish Balay /*
3e5c89e4eSSatish Balay      Provides utility routines for manulating any type of PETSc object.
4e5c89e4eSSatish Balay */
5d382aafbSBarry Smith #include "petscsys.h"  /*I   "petscsys.h"    I*/
6e5c89e4eSSatish Balay 
7e5c89e4eSSatish Balay #undef __FUNCT__
8e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectSetOptionsPrefix"
9e5c89e4eSSatish Balay /*
10e5c89e4eSSatish Balay    PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all
11e5c89e4eSSatish Balay    options of PetscObjectType in the database.
12e5c89e4eSSatish Balay 
13e5c89e4eSSatish Balay    Input Parameters:
14e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
15e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
16e5c89e4eSSatish Balay 
17e5c89e4eSSatish Balay    Notes:
18e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
19e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
20e5c89e4eSSatish Balay    hyphen.
21e5c89e4eSSatish Balay 
22e5c89e4eSSatish Balay    Concepts: prefix^setting
23e5c89e4eSSatish Balay 
24e5c89e4eSSatish Balay */
257087cfbeSBarry Smith PetscErrorCode  PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[])
26e5c89e4eSSatish Balay {
27e5c89e4eSSatish Balay   PetscErrorCode ierr;
28e5c89e4eSSatish Balay 
29e5c89e4eSSatish Balay   PetscFunctionBegin;
303cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
31e5c89e4eSSatish Balay   if (!prefix) {
32503cfb0cSBarry Smith     ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
33e5c89e4eSSatish Balay   } else {
34e32f2f54SBarry Smith     if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
35503cfb0cSBarry Smith     ierr = PetscFree(obj->prefix);CHKERRQ(ierr);
36e5c89e4eSSatish Balay     ierr = PetscStrallocpy(prefix,&obj->prefix);CHKERRQ(ierr);
37e5c89e4eSSatish Balay   }
38e5c89e4eSSatish Balay   PetscFunctionReturn(0);
39e5c89e4eSSatish Balay }
40e5c89e4eSSatish Balay 
41e5c89e4eSSatish Balay #undef __FUNCT__
42e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectAppendOptionsPrefix"
43e5c89e4eSSatish Balay /*
44e5c89e4eSSatish Balay    PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all
45e5c89e4eSSatish Balay    options of PetscObjectType in the database.
46e5c89e4eSSatish Balay 
47e5c89e4eSSatish Balay    Input Parameters:
48e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
49e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
50e5c89e4eSSatish Balay 
51e5c89e4eSSatish Balay    Notes:
52e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
53e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
54e5c89e4eSSatish Balay    hyphen.
55e5c89e4eSSatish Balay 
56e5c89e4eSSatish Balay    Concepts: prefix^setting
57e5c89e4eSSatish Balay 
58e5c89e4eSSatish Balay */
597087cfbeSBarry Smith PetscErrorCode  PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[])
60e5c89e4eSSatish Balay {
61e5c89e4eSSatish Balay   char   *buf = obj->prefix;
62e5c89e4eSSatish Balay   PetscErrorCode ierr;
63e5c89e4eSSatish Balay   size_t len1,len2;
64e5c89e4eSSatish Balay 
65e5c89e4eSSatish Balay   PetscFunctionBegin;
663cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
67e5c89e4eSSatish Balay   if (!prefix) {PetscFunctionReturn(0);}
68e5c89e4eSSatish Balay   if (!buf) {
69e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
70e5c89e4eSSatish Balay     PetscFunctionReturn(0);
71e5c89e4eSSatish Balay   }
72e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
73e5c89e4eSSatish Balay 
74e5c89e4eSSatish Balay   ierr  = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
75e5c89e4eSSatish Balay   ierr  = PetscStrlen(buf,&len2);CHKERRQ(ierr);
76e5c89e4eSSatish Balay   ierr  = PetscMalloc((1+len1+len2)*sizeof(char),&obj->prefix);CHKERRQ(ierr);
77e5c89e4eSSatish Balay   ierr  = PetscStrcpy(obj->prefix,buf);CHKERRQ(ierr);
78e5c89e4eSSatish Balay   ierr  = PetscStrcat(obj->prefix,prefix);CHKERRQ(ierr);
79e5c89e4eSSatish Balay   ierr  = PetscFree(buf);CHKERRQ(ierr);
80e5c89e4eSSatish Balay   PetscFunctionReturn(0);
81e5c89e4eSSatish Balay }
82e5c89e4eSSatish Balay 
83e5c89e4eSSatish Balay #undef __FUNCT__
84e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectGetOptionsPrefix"
85e5c89e4eSSatish Balay /*
86e5c89e4eSSatish Balay    PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject.
87e5c89e4eSSatish Balay 
88e5c89e4eSSatish Balay    Input Parameters:
89e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
90e5c89e4eSSatish Balay 
91e5c89e4eSSatish Balay    Output Parameters:
92e5c89e4eSSatish Balay .  prefix - pointer to the prefix string used is returned
93e5c89e4eSSatish Balay 
94e5c89e4eSSatish Balay    Concepts: prefix^getting
95e5c89e4eSSatish Balay 
96e5c89e4eSSatish Balay */
977087cfbeSBarry Smith PetscErrorCode  PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[])
98e5c89e4eSSatish Balay {
99e5c89e4eSSatish Balay   PetscFunctionBegin;
1003cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1013cfa8680SLisandro Dalcin   PetscValidPointer(prefix,2);
102e5c89e4eSSatish Balay   *prefix = obj->prefix;
103e5c89e4eSSatish Balay   PetscFunctionReturn(0);
104e5c89e4eSSatish Balay }
105e5c89e4eSSatish Balay 
106e5c89e4eSSatish Balay #undef __FUNCT__
107e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectPrependOptionsPrefix"
108e5c89e4eSSatish Balay /*
109e5c89e4eSSatish Balay    PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all
110e5c89e4eSSatish Balay    options of PetscObjectType in the database.
111e5c89e4eSSatish Balay 
112e5c89e4eSSatish Balay    Input Parameters:
113e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP.
114e5c89e4eSSatish Balay .  prefix - the prefix string to prepend to option requests of the object.
115e5c89e4eSSatish Balay 
116e5c89e4eSSatish Balay    Notes:
117e5c89e4eSSatish Balay    A hyphen (-) must NOT be given at the beginning of the prefix name.
118e5c89e4eSSatish Balay    The first character of all runtime options is AUTOMATICALLY the
119e5c89e4eSSatish Balay    hyphen.
120e5c89e4eSSatish Balay 
121e5c89e4eSSatish Balay    Concepts: prefix^setting
122e5c89e4eSSatish Balay 
123e5c89e4eSSatish Balay */
1247087cfbeSBarry Smith PetscErrorCode  PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[])
125e5c89e4eSSatish Balay {
1265c7534e4SLisandro Dalcin   char           *buf;
127e5c89e4eSSatish Balay   size_t         len1,len2;
1285c7534e4SLisandro Dalcin   PetscErrorCode ierr;
129e5c89e4eSSatish Balay 
130e5c89e4eSSatish Balay   PetscFunctionBegin;
1313cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
1325c7534e4SLisandro Dalcin   buf = obj->prefix;
133e5c89e4eSSatish Balay   if (!prefix) {PetscFunctionReturn(0);}
134e5c89e4eSSatish Balay   if (!buf) {
135e5c89e4eSSatish Balay     ierr = PetscObjectSetOptionsPrefix(obj,prefix);CHKERRQ(ierr);
136e5c89e4eSSatish Balay     PetscFunctionReturn(0);
137e5c89e4eSSatish Balay   }
138e32f2f54SBarry Smith   if (prefix[0] == '-') SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
139e5c89e4eSSatish Balay 
140e5c89e4eSSatish Balay   ierr = PetscStrlen(prefix,&len1);CHKERRQ(ierr);
141e5c89e4eSSatish Balay   ierr = PetscStrlen(buf,&len2);CHKERRQ(ierr);
142e5c89e4eSSatish Balay   ierr = PetscMalloc((1+len1+len2)*sizeof(char),&obj->prefix);CHKERRQ(ierr);
143e5c89e4eSSatish Balay   ierr = PetscStrcpy(obj->prefix,prefix);CHKERRQ(ierr);
144e5c89e4eSSatish Balay   ierr = PetscStrcat(obj->prefix,buf);CHKERRQ(ierr);
145e5c89e4eSSatish Balay   ierr = PetscFree(buf);CHKERRQ(ierr);
146e5c89e4eSSatish Balay   PetscFunctionReturn(0);
147e5c89e4eSSatish Balay }
148e5c89e4eSSatish Balay 
149