xref: /petsc/src/sys/objects/gcomm.c (revision fd9359e60ca5fa5d77bb606154a3e3d031343b71)
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 
100   PetscFunctionBegin;
101   PetscValidHeader(obj,1);
102   if (oldobj) {
103     obj->tablevel = oldobj->tablevel + tab;
104   } else {
105     obj->tablevel = tab;
106   }
107   PetscFunctionReturn(0);
108 }
109