xref: /petsc/src/sys/objects/gcomm.c (revision aeb4f306076a5d2a34b88aacd61cbca63e9ad687)
1 #define PETSC_DLL
2 /*
3      Provides utility routines for manulating any type of PETSc object.
4 */
5 #include "petsc.h"  /*I   "petsc.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 PETSC_DLLEXPORT 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 /*@C
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 PETSC_DLLEXPORT PetscObjectGetTabLevel(PetscObject obj,PetscInt *tab)
69 {
70   PetscFunctionBegin;
71   PetscValidHeader(obj,1);
72   *tab = obj->tablevel;
73   PetscFunctionReturn(0);
74 }
75 
76 /*@C
77    PetscObjectIncrementTabLevel - Sets the number of tabs that ASCII output for that object use based on
78          the tablevel of another object. This should be called immediately after the object is created.
79 
80    Not Collective
81 
82    Input Parameter:
83 +  obj - any PETSc object where we are changing the tab
84 .  oldobj - the object providing the tab
85 -  tab - the increment that is added to the old objects tab
86 
87 
88    Level: developer
89 
90     Notes: this is used to manage the output from options that are imbedded in other objects. For example
91       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
92       is very clear.
93 
94 .seealso:   PetscObjectSetLabLevel(),  PetscObjectGetTabLevel()
95 
96 @*/
97 PetscErrorCode PETSC_DLLEXPORT PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)
98 {
99   PetscErrorCode ierr;
100 
101   PetscFunctionBegin;
102   PetscValidHeader(obj,1);
103   if (oldobj) {
104     obj->tablevel = oldobj->tablevel + tab;
105   } else {
106     obj->tablevel = tab;
107   }
108   PetscFunctionReturn(0);
109 }
110