Actual source code: gcomm.c
petsc-3.7.7 2017-09-25
2: /*
3: Provides utility routines for manulating any type of PETSc object.
4: */
5: #include <petsc/private/petscimpl.h> /*I "petscsys.h" I*/
9: /*@C
10: PetscObjectComm - Gets the MPI communicator for any PetscObject regardless of the type.
12: Not Collective
14: Input Parameter:
15: . obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
16: cast with a (PetscObject), for example,
17: SETERRQ(PetscObjectComm((PetscObject)mat,...);
19: Output Parameter:
20: . comm - the MPI communicator or MPI_COMM_NULL if object is not valid
22: Level: advanced
24: Notes: Never use this in the form
25: $ comm = PetscObjectComm((PetscObject)obj);
26: instead use PetscObjectGetComm()
28: Concepts: communicator^getting from object
29: Concepts: MPI communicator^getting from object
31: .seealso: PetscObjectGetComm()
32: @*/
33: MPI_Comm PetscObjectComm(PetscObject obj)
34: {
35: if (!obj) return MPI_COMM_NULL;
36: return obj->comm;
37: }
41: /*@C
42: PetscObjectGetComm - Gets the MPI communicator for any PetscObject,
43: regardless of the type.
45: Not Collective
47: Input Parameter:
48: . obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
49: cast with a (PetscObject), for example,
50: PetscObjectGetComm((PetscObject)mat,&comm);
52: Output Parameter:
53: . comm - the MPI communicator
55: Level: advanced
57: Concepts: communicator^getting from object
58: Concepts: MPI communicator^getting from object
60: .seealso: PetscObjectComm()
61: @*/
62: PetscErrorCode PetscObjectGetComm(PetscObject obj,MPI_Comm *comm)
63: {
69: if (obj->bops->getcomm) {
70: obj->bops->getcomm(obj,comm);
71: } else *comm = obj->comm;
72: return(0);
73: }
77: /*@
78: PetscObjectGetTabLevel - Gets the number of tabs that ASCII output for that object use
80: Not Collective
82: Input Parameter:
83: . obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
84: cast with a (PetscObject), for example,
85: PetscObjectGetComm((PetscObject)mat,&comm);
87: Output Parameter:
88: . tab - the number of tabs
90: Level: developer
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.
96: .seealso: PetscObjectIncrementTabLevel()
98: @*/
99: PetscErrorCode PetscObjectGetTabLevel(PetscObject obj,PetscInt *tab)
100: {
103: *tab = obj->tablevel;
104: return(0);
105: }
109: /*@
110: PetscObjectSetTabLevel - Sets the number of tabs that ASCII output for that object use
112: Not Collective
114: Input Parameters:
115: + obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
116: cast with a (PetscObject), for example,
117: PetscObjectGetComm((PetscObject)mat,&comm);
118: - tab - the number of tabs
120: Level: developer
122: Notes: this is used to manage the output from options that are imbedded in other objects. For example
123: the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
124: is very clear.
126: .seealso: PetscObjectIncrementTabLevel()
127: @*/
128: PetscErrorCode PetscObjectSetTabLevel(PetscObject obj,PetscInt tab)
129: {
132: obj->tablevel = tab;
133: return(0);
134: }
138: /*@
139: PetscObjectIncrementTabLevel - Sets the number of tabs that ASCII output for that object use based on
140: the tablevel of another object. This should be called immediately after the object is created.
142: Not Collective
144: Input Parameter:
145: + obj - any PETSc object where we are changing the tab
146: . oldobj - the object providing the tab
147: - tab - the increment that is added to the old objects tab
150: Level: developer
152: Notes: this is used to manage the output from options that are imbedded in other objects. For example
153: the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
154: is very clear.
156: .seealso: PetscObjectSetLabLevel(), PetscObjectGetTabLevel()
158: @*/
159: PetscErrorCode PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)
160: {
164: if (oldobj) obj->tablevel = oldobj->tablevel + tab;
165: else obj->tablevel = tab;
166: return(0);
167: }