1
2 /*
3 Provides utility routines for manulating any type of PETSc object.
4 */
5 #include <petsc/private/petscimpl.h> /*I "petscsys.h" I*/
6
7 /*@C
8 PetscObjectComm - Gets the MPI communicator for any PetscObject regardless of the type.
9
10 Not Collective
11
12 Input Parameter:
13 . obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
14 cast with a (PetscObject), for example,
15 SETERRQ(PetscObjectComm((PetscObject)mat,...);
16
17 Output Parameter:
18 . comm - the MPI communicator or MPI_COMM_NULL if object is not valid
19
20 Level: advanced
21
22 Notes:
23 Never use this in the form
24 $ comm = PetscObjectComm((PetscObject)obj);
25 instead use PetscObjectGetComm()
26
27
28 .seealso: PetscObjectGetComm()
29 @*/
PetscObjectComm(PetscObject obj)30 MPI_Comm PetscObjectComm(PetscObject obj)
31 {
32 if (!obj) return MPI_COMM_NULL;
33 return obj->comm;
34 }
35
36 /*@C
37 PetscObjectGetComm - Gets the MPI communicator for any PetscObject,
38 regardless of the type.
39
40 Not Collective
41
42 Input Parameter:
43 . obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
44 cast with a (PetscObject), for example,
45 PetscObjectGetComm((PetscObject)mat,&comm);
46
47 Output Parameter:
48 . comm - the MPI communicator
49
50 Level: advanced
51
52
53 .seealso: PetscObjectComm()
54 @*/
PetscObjectGetComm(PetscObject obj,MPI_Comm * comm)55 PetscErrorCode PetscObjectGetComm(PetscObject obj,MPI_Comm *comm)
56 {
57 PetscErrorCode ierr;
58
59 PetscFunctionBegin;
60 PetscValidHeader(obj,1);
61 PetscValidPointer(comm,2);
62 if (obj->bops->getcomm) {
63 ierr = obj->bops->getcomm(obj,comm);CHKERRQ(ierr);
64 } else *comm = obj->comm;
65 PetscFunctionReturn(0);
66 }
67
68 /*@
69 PetscObjectGetTabLevel - Gets the number of tabs that ASCII output for that object use
70
71 Not Collective
72
73 Input Parameter:
74 . obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
75 cast with a (PetscObject), for example,
76 PetscObjectGetComm((PetscObject)mat,&comm);
77
78 Output Parameter:
79 . tab - the number of tabs
80
81 Level: developer
82
83 Notes:
84 this is used to manage the output from options that are imbedded in other objects. For example
85 the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
86 is very clear.
87
88 .seealso: PetscObjectIncrementTabLevel()
89
90 @*/
PetscObjectGetTabLevel(PetscObject obj,PetscInt * tab)91 PetscErrorCode PetscObjectGetTabLevel(PetscObject obj,PetscInt *tab)
92 {
93 PetscFunctionBegin;
94 PetscValidHeader(obj,1);
95 *tab = obj->tablevel;
96 PetscFunctionReturn(0);
97 }
98
99 /*@
100 PetscObjectSetTabLevel - Sets the number of tabs that ASCII output for that object use
101
102 Not Collective
103
104 Input Parameters:
105 + obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
106 cast with a (PetscObject), for example,
107 PetscObjectGetComm((PetscObject)mat,&comm);
108 - tab - the number of tabs
109
110 Level: developer
111
112 Notes:
113 this is used to manage the output from options that are imbedded in other objects. For example
114 the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
115 is very clear.
116
117 .seealso: PetscObjectIncrementTabLevel()
118 @*/
PetscObjectSetTabLevel(PetscObject obj,PetscInt tab)119 PetscErrorCode PetscObjectSetTabLevel(PetscObject obj,PetscInt tab)
120 {
121 PetscFunctionBegin;
122 PetscValidHeader(obj,1);
123 obj->tablevel = tab;
124 PetscFunctionReturn(0);
125 }
126
127 /*@
128 PetscObjectIncrementTabLevel - Sets the number of tabs that ASCII output for that object use based on
129 the tablevel of another object. This should be called immediately after the object is created.
130
131 Not Collective
132
133 Input Parameter:
134 + obj - any PETSc object where we are changing the tab
135 . oldobj - the object providing the tab
136 - tab - the increment that is added to the old objects tab
137
138
139 Level: developer
140
141 Notes:
142 this is used to manage the output from options that are imbedded in other objects. For example
143 the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
144 is very clear.
145
146 .seealso: PetscObjectSetTabLevel(), PetscObjectGetTabLevel()
147
148 @*/
PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)149 PetscErrorCode PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)
150 {
151
152 PetscFunctionBegin;
153 PetscValidHeader(obj,1);
154 if (oldobj) obj->tablevel = oldobj->tablevel + tab;
155 else obj->tablevel = tab;
156 PetscFunctionReturn(0);
157 }
158