Actual source code: gcomm.c

petsc-3.3-p7 2013-05-11
  2: /*
  3:      Provides utility routines for manulating any type of PETSc object.
  4: */
  5: #include <petscsys.h>  /*I   "petscsys.h"    I*/

  9: /*@C
 10:    PetscObjectGetComm - Gets the MPI communicator for any PetscObject, 
 11:    regardless of the type.

 13:    Not Collective

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

 20:    Output Parameter:
 21: .  comm - the MPI communicator

 23:    Level: advanced

 25:    Concepts: communicator^getting from object
 26:    Concepts: MPI communicator^getting from object

 28: @*/
 29: PetscErrorCode  PetscObjectGetComm(PetscObject obj,MPI_Comm *comm)
 30: {

 36:   if (obj->bops->getcomm) {
 37:     obj->bops->getcomm(obj,comm);
 38:   } else {
 39:     *comm = obj->comm;
 40:   }
 41:   return(0);
 42: }

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

 49:    Not Collective

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

 56:    Output Parameter:
 57: .   tab - the number of tabs

 59:    Level: developer

 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.

 65: .seealso:  PetscObjectIncrementTabLevel()

 67: @*/
 68: PetscErrorCode  PetscObjectGetTabLevel(PetscObject obj,PetscInt *tab)
 69: {
 72:   *tab = obj->tablevel;
 73:   return(0);
 74: }

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

 81:    Not Collective

 83:    Input Parameters:
 84: +  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
 85:          cast with a (PetscObject), for example, 
 86:          PetscObjectGetComm((PetscObject)mat,&comm);
 87: -   tab - the number of tabs

 89:    Level: developer

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

 95: .seealso:  PetscObjectIncrementTabLevel()
 96: @*/
 97: PetscErrorCode  PetscObjectSetTabLevel(PetscObject obj,PetscInt tab)
 98: {
101:   obj->tablevel = tab;
102:   return(0);
103: }

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

111:    Not Collective

113:    Input Parameter:
114: +  obj - any PETSc object where we are changing the tab
115: .  oldobj - the object providing the tab
116: -  tab - the increment that is added to the old objects tab


119:    Level: developer

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

125: .seealso:   PetscObjectSetLabLevel(),  PetscObjectGetTabLevel()

127: @*/
128: PetscErrorCode  PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)
129: {

133:   if (oldobj) {
134:     obj->tablevel = oldobj->tablevel + tab;
135:   } else {
136:     obj->tablevel = tab;
137:   }
138:   return(0);
139: }