Actual source code: gcomm.c

petsc-3.14.6 2021-03-30
Report Typos and Errors

  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()


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

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

 40:    Not Collective

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

 47:    Output Parameter:
 48: .  comm - the MPI communicator

 50:    Level: advanced


 53: .seealso: PetscObjectComm()
 54: @*/
 55: PetscErrorCode  PetscObjectGetComm(PetscObject obj,MPI_Comm *comm)
 56: {

 62:   if (obj->bops->getcomm) {
 63:     obj->bops->getcomm(obj,comm);
 64:   } else *comm = obj->comm;
 65:   return(0);
 66: }

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

 71:    Not Collective

 73:    Input Parameter:
 74: .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
 75:          cast with a (PetscObject), for example,
 76:          PetscObjectGetComm((PetscObject)mat,&comm);

 78:    Output Parameter:
 79: .   tab - the number of tabs

 81:    Level: developer

 83:     Notes:
 84:     this is used to manage the output from options that are imbedded in other objects. For example
 85:       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
 86:       is very clear.

 88: .seealso:  PetscObjectIncrementTabLevel()

 90: @*/
 91: PetscErrorCode  PetscObjectGetTabLevel(PetscObject obj,PetscInt *tab)
 92: {
 95:   *tab = obj->tablevel;
 96:   return(0);
 97: }

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

102:    Not Collective

104:    Input Parameters:
105: +  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
106:          cast with a (PetscObject), for example,
107:          PetscObjectGetComm((PetscObject)mat,&comm);
108: -   tab - the number of tabs

110:    Level: developer

112:     Notes:
113:     this is used to manage the output from options that are imbedded in other objects. For example
114:       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
115:       is very clear.

117: .seealso:  PetscObjectIncrementTabLevel()
118: @*/
119: PetscErrorCode  PetscObjectSetTabLevel(PetscObject obj,PetscInt tab)
120: {
123:   obj->tablevel = tab;
124:   return(0);
125: }

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

131:    Not Collective

133:    Input Parameter:
134: +  obj - any PETSc object where we are changing the tab
135: .  oldobj - the object providing the tab
136: -  tab - the increment that is added to the old objects tab


139:    Level: developer

141:     Notes:
142:     this is used to manage the output from options that are imbedded in other objects. For example
143:       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
144:       is very clear.

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

148: @*/
149: PetscErrorCode  PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)
150: {

154:   if (oldobj) obj->tablevel = oldobj->tablevel + tab;
155:   else obj->tablevel = tab;
156:   return(0);
157: }