xref: /petsc/src/sys/objects/gcomm.c (revision 7d0a6c19129e7069c8a40e210b34ed62989173db)
1 
2 /*
3      Provides utility routines for manulating any type of PETSc object.
4 */
5 #include "petscsys.h"  /*I   "petscsys.h"    I*/
6 
7 #undef __FUNCT__
8 #define __FUNCT__ "PetscObjectGetComm"
9 /*@C
10    PetscObjectGetComm - Gets the MPI communicator for any PetscObject,
11    regardless of the type.
12 
13    Not Collective
14 
15    Input Parameter:
16 .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
17          cast with a (PetscObject), for example,
18          PetscObjectGetComm((PetscObject)mat,&comm);
19 
20    Output Parameter:
21 .  comm - the MPI communicator
22 
23    Level: advanced
24 
25    Concepts: communicator^getting from object
26    Concepts: MPI communicator^getting from object
27 
28 @*/
29 PetscErrorCode  PetscObjectGetComm(PetscObject obj,MPI_Comm *comm)
30 {
31   PetscErrorCode ierr;
32 
33   PetscFunctionBegin;
34   PetscValidHeader(obj,1);
35   PetscValidPointer(comm,2);
36   if (obj->bops->getcomm) {
37     ierr = obj->bops->getcomm(obj,comm);CHKERRQ(ierr);
38   } else {
39     *comm = obj->comm;
40   }
41   PetscFunctionReturn(0);
42 }
43 
44 #undef __FUNCT__
45 #define __FUNCT__ "PetscObjectGetTabLevel"
46 /*@
47    PetscObjectGetTabLevel - Gets the number of tabs that ASCII output for that object use
48 
49    Not Collective
50 
51    Input Parameter:
52 .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
53          cast with a (PetscObject), for example,
54          PetscObjectGetComm((PetscObject)mat,&comm);
55 
56    Output Parameter:
57 .   tab - the number of tabs
58 
59    Level: developer
60 
61     Notes: this is used to manage the output from options that are imbedded in other objects. For example
62       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
63       is very clear.
64 
65 .seealso:  PetscObjectIncrementTabLevel()
66 
67 @*/
68 PetscErrorCode  PetscObjectGetTabLevel(PetscObject obj,PetscInt *tab)
69 {
70   PetscFunctionBegin;
71   PetscValidHeader(obj,1);
72   *tab = obj->tablevel;
73   PetscFunctionReturn(0);
74 }
75 
76 #undef __FUNCT__
77 #define __FUNCT__ "PetscObjectIncrementTabLevel"
78 /*@
79    PetscObjectIncrementTabLevel - Sets the number of tabs that ASCII output for that object use based on
80          the tablevel of another object. This should be called immediately after the object is created.
81 
82    Not Collective
83 
84    Input Parameter:
85 +  obj - any PETSc object where we are changing the tab
86 .  oldobj - the object providing the tab
87 -  tab - the increment that is added to the old objects tab
88 
89 
90    Level: developer
91 
92     Notes: this is used to manage the output from options that are imbedded in other objects. For example
93       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
94       is very clear.
95 
96 .seealso:   PetscObjectSetLabLevel(),  PetscObjectGetTabLevel()
97 
98 @*/
99 PetscErrorCode  PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)
100 {
101 
102   PetscFunctionBegin;
103   PetscValidHeader(obj,1);
104   if (oldobj) {
105     obj->tablevel = oldobj->tablevel + tab;
106   } else {
107     obj->tablevel = tab;
108   }
109   PetscFunctionReturn(0);
110 }
111