Actual source code: prefix.c
2: /*
3: Provides utility routines for manulating any type of PETSc object.
4: */
5: #include <petsc/private/petscimpl.h>
7: /*@C
8: PetscObjectGetOptions - Gets the options database used by the object. Call immediately after creating the object.
10: Collective on PetscObject
12: Input Parameter:
13: . obj - any PETSc object, for example a Vec, Mat or KSP.
15: Output Parameter:
16: . options - the options database
18: Notes:
19: if this is not called the object will use the default options database
21: Level: advanced
23: .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
24: PetscObjectGetOptionsPrefix(), PetscObjectSetOptions()
26: @*/
27: PetscErrorCode PetscObjectGetOptions(PetscObject obj,PetscOptions *options)
28: {
30: *options = obj->options;
31: return 0;
32: }
34: /*@C
35: PetscObjectSetOptions - Sets the options database used by the object. Call immediately after creating the object.
37: Collective on PetscObject
39: Input Parameters:
40: + obj - any PETSc object, for example a Vec, Mat or KSP.
41: - options - the options database, use NULL for default
43: Notes:
44: if this is not called the object will use the default options database
46: Level: advanced
48: .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
49: PetscObjectGetOptionsPrefix(), PetscObjectGetOptions()
51: @*/
52: PetscErrorCode PetscObjectSetOptions(PetscObject obj,PetscOptions options)
53: {
55: obj->options = options;
56: return 0;
57: }
59: /*@C
60: PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all
61: options of PetscObjectType in the database.
63: Collective on Object
65: Input Parameters:
66: + obj - any PETSc object, for example a Vec, Mat or KSP.
67: - prefix - the prefix string to prepend to option requests of the object.
69: Notes:
70: A hyphen (-) must NOT be given at the beginning of the prefix name.
71: The first character of all runtime options is AUTOMATICALLY the
72: hyphen.
74: Level: advanced
76: .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
77: PetscObjectGetOptionsPrefix(), TSSetOptionsPrefix(), SNESSetOptionsPrefix(), KSPSetOptionsPrefix()
79: @*/
80: PetscErrorCode PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[])
81: {
83: if (prefix) {
86: if (prefix != obj->prefix) {
87: PetscFree(obj->prefix);
88: PetscStrallocpy(prefix,&obj->prefix);
89: }
90: } else PetscFree(obj->prefix);
91: return 0;
92: }
94: /*@C
95: PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all
96: options of PetscObjectType in the database.
98: Input Parameters:
99: + obj - any PETSc object, for example a Vec, Mat or KSP.
100: - prefix - the prefix string to prepend to option requests of the object.
102: Notes:
103: A hyphen (-) must NOT be given at the beginning of the prefix name.
104: The first character of all runtime options is AUTOMATICALLY the
105: hyphen.
107: Level: advanced
109: .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
110: PetscObjectGetOptionsPrefix(), TSAppendOptionsPrefix(), SNESAppendOptionsPrefix(), KSPAppendOptionsPrefix()
112: @*/
113: PetscErrorCode PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[])
114: {
115: char *buf = obj->prefix;
116: size_t len1,len2;
119: if (!prefix) return 0;
120: if (!buf) {
121: PetscObjectSetOptionsPrefix(obj,prefix);
122: return 0;
123: }
126: PetscStrlen(prefix,&len1);
127: PetscStrlen(buf,&len2);
128: PetscMalloc1(1+len1+len2,&obj->prefix);
129: PetscStrcpy(obj->prefix,buf);
130: PetscStrcat(obj->prefix,prefix);
131: PetscFree(buf);
132: return 0;
133: }
135: /*@C
136: PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject.
138: Input Parameters:
139: . obj - any PETSc object, for example a Vec, Mat or KSP.
141: Output Parameters:
142: . prefix - pointer to the prefix string used is returned
144: Level: advanced
146: .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(), PetscObjectPrependOptionsPrefix(),
147: TSGetOptionsPrefix(), SNESGetOptionsPrefix(), KSPGetOptionsPrefix()
149: @*/
150: PetscErrorCode PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[])
151: {
154: *prefix = obj->prefix;
155: return 0;
156: }
158: /*@C
159: PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all
160: options of PetscObjectType in the database.
162: Input Parameters:
163: + obj - any PETSc object, for example a Vec, Mat or KSP.
164: - prefix - the prefix string to prepend to option requests of the object.
166: Notes:
167: A hyphen (-) must NOT be given at the beginning of the prefix name.
168: The first character of all runtime options is AUTOMATICALLY the
169: hyphen.
171: Level: advanced
173: .seealso: PetscOptionsCreate(), PetscOptionsDestroy(), PetscObjectSetOptionsPrefix(), PetscObjectAppendOptionsPrefix(),
174: PetscObjectGetOptionsPrefix()
176: @*/
177: PetscErrorCode PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[])
178: {
179: char *buf;
180: size_t len1,len2;
183: buf = obj->prefix;
184: if (!prefix) return 0;
185: if (!buf) {
186: PetscObjectSetOptionsPrefix(obj,prefix);
187: return 0;
188: }
191: PetscStrlen(prefix,&len1);
192: PetscStrlen(buf,&len2);
193: PetscMalloc1(1+len1+len2,&obj->prefix);
194: PetscStrcpy(obj->prefix,prefix);
195: PetscStrcat(obj->prefix,buf);
196: PetscFree(buf);
197: return 0;
198: }