Date: 2013-07-02T14:38:51+00:00

Actual source code: gcomm.c
petsc-3.4.2 2013-07-02

      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: }