xref: /petsc/src/sys/objects/gcomm.c (revision afcb2eb581850588619400ff311bed89835ec555)
17d0a6c19SBarry Smith 
2e5c89e4eSSatish Balay /*
3e5c89e4eSSatish Balay      Provides utility routines for manulating any type of PETSc object.
4e5c89e4eSSatish Balay */
5*afcb2eb5SJed Brown #include <petsc-private/petscimpl.h>  /*I   "petscsys.h"    I*/
6e5c89e4eSSatish Balay 
7e5c89e4eSSatish Balay #undef __FUNCT__
8e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectGetComm"
9e5c89e4eSSatish Balay /*@C
10e5c89e4eSSatish Balay    PetscObjectGetComm - Gets the MPI communicator for any PetscObject,
11e5c89e4eSSatish Balay    regardless of the type.
12e5c89e4eSSatish Balay 
13e5c89e4eSSatish Balay    Not Collective
14e5c89e4eSSatish Balay 
15e5c89e4eSSatish Balay    Input Parameter:
16e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
17e5c89e4eSSatish Balay          cast with a (PetscObject), for example,
18e5c89e4eSSatish Balay          PetscObjectGetComm((PetscObject)mat,&comm);
19e5c89e4eSSatish Balay 
20e5c89e4eSSatish Balay    Output Parameter:
21e5c89e4eSSatish Balay .  comm - the MPI communicator
22e5c89e4eSSatish Balay 
23e5c89e4eSSatish Balay    Level: advanced
24e5c89e4eSSatish Balay 
25e5c89e4eSSatish Balay    Concepts: communicator^getting from object
26e5c89e4eSSatish Balay    Concepts: MPI communicator^getting from object
27e5c89e4eSSatish Balay 
28e5c89e4eSSatish Balay @*/
297087cfbeSBarry Smith PetscErrorCode  PetscObjectGetComm(PetscObject obj,MPI_Comm *comm)
30e5c89e4eSSatish Balay {
31e5c89e4eSSatish Balay   PetscErrorCode ierr;
32e5c89e4eSSatish Balay 
33e5c89e4eSSatish Balay   PetscFunctionBegin;
343cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
353cfa8680SLisandro Dalcin   PetscValidPointer(comm,2);
36e5c89e4eSSatish Balay   if (obj->bops->getcomm) {
37e5c89e4eSSatish Balay     ierr = obj->bops->getcomm(obj,comm);CHKERRQ(ierr);
38a297a907SKarl Rupp   } else *comm = obj->comm;
39e5c89e4eSSatish Balay   PetscFunctionReturn(0);
40e5c89e4eSSatish Balay }
41e5c89e4eSSatish Balay 
421cee3971SBarry Smith #undef __FUNCT__
431cee3971SBarry Smith #define __FUNCT__ "PetscObjectGetTabLevel"
44cbf1b8bfSBarry Smith /*@
451cee3971SBarry Smith    PetscObjectGetTabLevel - Gets the number of tabs that ASCII output for that object use
46e5c89e4eSSatish Balay 
471cee3971SBarry Smith    Not Collective
481cee3971SBarry Smith 
491cee3971SBarry Smith    Input Parameter:
501cee3971SBarry Smith .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
511cee3971SBarry Smith          cast with a (PetscObject), for example,
521cee3971SBarry Smith          PetscObjectGetComm((PetscObject)mat,&comm);
531cee3971SBarry Smith 
541cee3971SBarry Smith    Output Parameter:
551cee3971SBarry Smith .   tab - the number of tabs
561cee3971SBarry Smith 
571cee3971SBarry Smith    Level: developer
581cee3971SBarry Smith 
591cee3971SBarry Smith     Notes: this is used to manage the output from options that are imbedded in other objects. For example
601cee3971SBarry Smith       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
611cee3971SBarry Smith       is very clear.
621cee3971SBarry Smith 
631cee3971SBarry Smith .seealso:  PetscObjectIncrementTabLevel()
641cee3971SBarry Smith 
651cee3971SBarry Smith @*/
667087cfbeSBarry Smith PetscErrorCode  PetscObjectGetTabLevel(PetscObject obj,PetscInt *tab)
671cee3971SBarry Smith {
681cee3971SBarry Smith   PetscFunctionBegin;
691cee3971SBarry Smith   PetscValidHeader(obj,1);
701cee3971SBarry Smith   *tab = obj->tablevel;
711cee3971SBarry Smith   PetscFunctionReturn(0);
721cee3971SBarry Smith }
731cee3971SBarry Smith 
7453c77d0aSJed Brown #undef __FUNCT__
75da35de2aSMatthew G Knepley #define __FUNCT__ "PetscObjectSetTabLevel"
76da35de2aSMatthew G Knepley /*@
77da35de2aSMatthew G Knepley    PetscObjectSetTabLevel - Sets the number of tabs that ASCII output for that object use
78da35de2aSMatthew G Knepley 
79da35de2aSMatthew G Knepley    Not Collective
80da35de2aSMatthew G Knepley 
81da35de2aSMatthew G Knepley    Input Parameters:
82da35de2aSMatthew G Knepley +  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
83da35de2aSMatthew G Knepley          cast with a (PetscObject), for example,
84da35de2aSMatthew G Knepley          PetscObjectGetComm((PetscObject)mat,&comm);
85da35de2aSMatthew G Knepley -   tab - the number of tabs
86da35de2aSMatthew G Knepley 
87da35de2aSMatthew G Knepley    Level: developer
88da35de2aSMatthew G Knepley 
89da35de2aSMatthew G Knepley     Notes: this is used to manage the output from options that are imbedded in other objects. For example
90da35de2aSMatthew G Knepley       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
91da35de2aSMatthew G Knepley       is very clear.
92da35de2aSMatthew G Knepley 
93da35de2aSMatthew G Knepley .seealso:  PetscObjectIncrementTabLevel()
94da35de2aSMatthew G Knepley @*/
95da35de2aSMatthew G Knepley PetscErrorCode  PetscObjectSetTabLevel(PetscObject obj,PetscInt tab)
96da35de2aSMatthew G Knepley {
97da35de2aSMatthew G Knepley   PetscFunctionBegin;
98da35de2aSMatthew G Knepley   PetscValidHeader(obj,1);
99da35de2aSMatthew G Knepley   obj->tablevel = tab;
100da35de2aSMatthew G Knepley   PetscFunctionReturn(0);
101da35de2aSMatthew G Knepley }
102da35de2aSMatthew G Knepley 
103da35de2aSMatthew G Knepley #undef __FUNCT__
10453c77d0aSJed Brown #define __FUNCT__ "PetscObjectIncrementTabLevel"
105cbf1b8bfSBarry Smith /*@
1061cee3971SBarry Smith    PetscObjectIncrementTabLevel - Sets the number of tabs that ASCII output for that object use based on
1071cee3971SBarry Smith          the tablevel of another object. This should be called immediately after the object is created.
1081cee3971SBarry Smith 
1091cee3971SBarry Smith    Not Collective
1101cee3971SBarry Smith 
1111cee3971SBarry Smith    Input Parameter:
1121cee3971SBarry Smith +  obj - any PETSc object where we are changing the tab
1131cee3971SBarry Smith .  oldobj - the object providing the tab
1141cee3971SBarry Smith -  tab - the increment that is added to the old objects tab
1151cee3971SBarry Smith 
1161cee3971SBarry Smith 
1171cee3971SBarry Smith    Level: developer
1181cee3971SBarry Smith 
1191cee3971SBarry Smith     Notes: this is used to manage the output from options that are imbedded in other objects. For example
1201cee3971SBarry Smith       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
1211cee3971SBarry Smith       is very clear.
1221cee3971SBarry Smith 
1231cee3971SBarry Smith .seealso:   PetscObjectSetLabLevel(),  PetscObjectGetTabLevel()
1241cee3971SBarry Smith 
1251cee3971SBarry Smith @*/
1267087cfbeSBarry Smith PetscErrorCode  PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)
1271cee3971SBarry Smith {
1281cee3971SBarry Smith 
1291cee3971SBarry Smith   PetscFunctionBegin;
1301cee3971SBarry Smith   PetscValidHeader(obj,1);
131a297a907SKarl Rupp   if (oldobj) obj->tablevel = oldobj->tablevel + tab;
132a297a907SKarl Rupp   else obj->tablevel = tab;
1331cee3971SBarry Smith   PetscFunctionReturn(0);
1341cee3971SBarry Smith }
135