Actual source code: gcomm.c
1: /*
2: Provides utility routines for manulating any type of PETSc object.
3: */
4: #include <petsc/private/petscimpl.h>
6: /*@C
7: PetscObjectComm - Gets the MPI communicator for any `PetscObject` regardless of the type.
9: Not Collective
11: Input Parameter:
12: . obj - any PETSc object, for example a `Vec`, `Mat` or `KSP`. It must be
13: cast with a (`PetscObject`), for example, `PetscObjectComm`((`PetscObject`)mat,...);
15: Level: advanced
17: Note:
18: Returns the MPI communicator or `MPI_COMM_NULL` if `obj` is not valid.
20: This is one of the rare PETSc routines that does not return an error code. Use `PetscObjectGetComm()`
21: when appropriate for error handling.
23: .seealso: `PetscObject`, `PetscObjectGetComm()`
24: @*/
25: MPI_Comm PetscObjectComm(PetscObject obj)
26: {
27: return obj ? obj->comm : MPI_COMM_NULL;
28: }
30: /*@C
31: PetscObjectGetComm - Gets the MPI communicator for any `PetscObject` regardless of the type.
33: Not Collective
35: Input Parameter:
36: . obj - any PETSc object, for example a `Vec`, `Mat` or `KSP`. It must be cast with a (`PetscObject`), for example,
37: `PetscObjectGetComm`((`PetscObject`)mat,&comm);
39: Output Parameter:
40: . comm - the MPI communicator
42: Level: advanced
44: .seealso: `PetscObject`, `PetscObjectComm()`
45: @*/
46: PetscErrorCode PetscObjectGetComm(PetscObject obj, MPI_Comm *comm)
47: {
48: PetscFunctionBegin;
50: PetscAssertPointer(comm, 2);
51: *comm = obj->comm;
52: PetscFunctionReturn(PETSC_SUCCESS);
53: }
55: /*@
56: PetscObjectGetTabLevel - Gets the number of tabs that `PETSCVIEWERASCII` output for that object uses
58: Not Collective
60: Input Parameter:
61: . obj - any PETSc object, for example a `Vec`, `Mat` or `KSP`. It must be cast with a (`PetscObject`), for example,
62: `PetscObjectGetTabLevel`((`PetscObject`)mat,&tab);
64: Output Parameter:
65: . tab - the number of tabs
67: Level: developer
69: Note:
70: This is used to manage the output from options that are embedded in other objects. For example
71: the `KSP` object inside a `SNES` object. By indenting each lower level further the hierarchy of objects
72: is clear.
74: .seealso: `PetscObjectIncrementTabLevel()`, `PetscObjectSetTabLevel()`, `PETSCVIEWERASCII`, `PetscObject`
75: @*/
76: PetscErrorCode PetscObjectGetTabLevel(PetscObject obj, PetscInt *tab)
77: {
78: PetscFunctionBegin;
80: PetscAssertPointer(tab, 2);
81: *tab = obj->tablevel;
82: PetscFunctionReturn(PETSC_SUCCESS);
83: }
85: /*@
86: PetscObjectSetTabLevel - Sets the number of tabs that `PETSCVIEWERASCII` output for that object uses
88: Not Collective
90: Input Parameters:
91: + obj - any PETSc object, for example a `Vec`, `Mat` or `KSP`. It must be cast with a (`PetscObject`), for example,
92: `PetscObjectSetTabLevel`((`PetscObject`)mat,tab;
93: - tab - the number of tabs
95: Level: developer
97: Notes:
98: this is used to manage the output from options that are embedded in other objects. For example
99: the `KSP` object inside a `SNES` object. By indenting each lower level further the hierarchy of objects
100: is clear.
102: `PetscObjectIncrementTabLevel()` is the preferred API
104: .seealso: `PetscObjectIncrementTabLevel()`, `PetscObjectGetTabLevel()`
105: @*/
106: PetscErrorCode PetscObjectSetTabLevel(PetscObject obj, PetscInt tab)
107: {
108: PetscFunctionBegin;
110: obj->tablevel = tab;
111: PetscFunctionReturn(PETSC_SUCCESS);
112: }
114: /*@
115: PetscObjectIncrementTabLevel - Increments the number of tabs that `PETSCVIEWERASCII` output for that object use based on
116: the tablevel of another object. This should be called immediately after the object is created.
118: Not Collective
120: Input Parameters:
121: + obj - any PETSc object where we are changing the tab
122: . oldobj - the object providing the tab, optional pass `NULL` to use 0 as the previous tablevel for `obj`
123: - tab - the increment that is added to the old objects tab
125: Level: developer
127: Note:
128: this is used to manage the output from options that are embedded in other objects. For example
129: the `KSP` object inside a `SNES` object. By indenting each lower level further the hierarchy of objects
130: is clear.
132: .seealso: `PETSCVIEWERASCII`, `PetscObjectSetTabLevel()`, `PetscObjectGetTabLevel()`
133: @*/
134: PetscErrorCode PetscObjectIncrementTabLevel(PetscObject obj, PetscObject oldobj, PetscInt tab)
135: {
136: PetscFunctionBegin;
139: obj->tablevel = (oldobj ? oldobj->tablevel : 0) + tab;
140: PetscFunctionReturn(PETSC_SUCCESS);
141: }