Actual source code: gcomm.c


  2: /*
  3:      Provides utility routines for manulating any type of PETSc object.
  4: */
  5: #include <petsc/private/petscimpl.h>

  7: /*@C
  8:    PetscObjectComm - Gets the MPI communicator for any PetscObject   regardless of the type.

 10:    Not Collective

 12:    Input Parameter:
 13: .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
 14:          cast with a (PetscObject), for example,
 15:          SETERRQ(PetscObjectComm((PetscObject)mat,...);

 17:    Output Parameter:
 18: .  comm - the MPI communicator or MPI_COMM_NULL if object is not valid

 20:    Level: advanced

 22:    Notes:
 23:     Never use this in the form
 24: $       comm = PetscObjectComm((PetscObject)obj);
 25:         instead use PetscObjectGetComm()

 27: .seealso: PetscObjectGetComm()
 28: @*/
 29: MPI_Comm  PetscObjectComm(PetscObject obj)
 30: {
 31:   return obj ? obj->comm : MPI_COMM_NULL;
 32: }

 34: /*@C
 35:    PetscObjectGetComm - Gets the MPI communicator for any PetscObject,
 36:    regardless of the type.

 38:    Not Collective

 40:    Input Parameter:
 41: .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
 42:          cast with a (PetscObject), for example,
 43:          PetscObjectGetComm((PetscObject)mat,&comm);

 45:    Output Parameter:
 46: .  comm - the MPI communicator

 48:    Level: advanced

 50: .seealso: PetscObjectComm()
 51: @*/
 52: PetscErrorCode  PetscObjectGetComm(PetscObject obj,MPI_Comm *comm)
 53: {
 56:   if (obj->bops->getcomm) obj->bops->getcomm(obj,comm);
 57:   else *comm = obj->comm;
 58:   return 0;
 59: }

 61: /*@
 62:    PetscObjectGetTabLevel - Gets the number of tabs that ASCII output for that object use

 64:    Not Collective

 66:    Input Parameter:
 67: .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
 68:          cast with a (PetscObject), for example,
 69:          PetscObjectGetComm((PetscObject)mat,&comm);

 71:    Output Parameter:
 72: .   tab - the number of tabs

 74:    Level: developer

 76:     Notes:
 77:     this is used to manage the output from options that are embedded in other objects. For example
 78:       the KSP object inside a SNES object. By indenting each lower level further the hierarchy of objects
 79:       is very clear.

 81: .seealso:  PetscObjectIncrementTabLevel()

 83: @*/
 84: PetscErrorCode  PetscObjectGetTabLevel(PetscObject obj,PetscInt *tab)
 85: {
 88:   *tab = obj->tablevel;
 89:   return 0;
 90: }

 92: /*@
 93:    PetscObjectSetTabLevel - Sets the number of tabs that ASCII output for that object use

 95:    Not Collective

 97:    Input Parameters:
 98: +  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
 99:          cast with a (PetscObject), for example,
100:          PetscObjectGetComm((PetscObject)mat,&comm);
101: -   tab - the number of tabs

103:    Level: developer

105:     Notes:
106:     this is used to manage the output from options that are embedded in other objects. For example
107:       the KSP object inside a SNES object. By indenting each lower level further the hierarchy of objects
108:       is very clear.

110: .seealso:  PetscObjectIncrementTabLevel()
111: @*/
112: PetscErrorCode  PetscObjectSetTabLevel(PetscObject obj,PetscInt tab)
113: {
115:   obj->tablevel = tab;
116:   return 0;
117: }

119: /*@
120:    PetscObjectIncrementTabLevel - Sets the number of tabs that ASCII output for that object use based on
121:          the tablevel of another object. This should be called immediately after the object is created.

123:    Not Collective

125:    Input Parameters:
126: +  obj - any PETSc object where we are changing the tab
127: .  oldobj - the object providing the tab
128: -  tab - the increment that is added to the old objects tab

130:    Level: developer

132:     Notes:
133:     this is used to manage the output from options that are embedded in other objects. For example
134:       the KSP object inside a SNES object. By indenting each lower level further the hierarchy of objects
135:       is very clear.

137: .seealso:   PetscObjectSetTabLevel(),  PetscObjectGetTabLevel()

139: @*/
140: PetscErrorCode  PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)
141: {
144:   obj->tablevel = (oldobj ? oldobj->tablevel : 0)+tab;
145:   return 0;
146: }