xref: /petsc/src/sys/objects/gcomm.c (revision ce94432eddcd14845bc7e8083b7f8ea723b9bf7d)
17d0a6c19SBarry Smith 
2e5c89e4eSSatish Balay /*
3e5c89e4eSSatish Balay      Provides utility routines for manulating any type of PETSc object.
4e5c89e4eSSatish Balay */
5afcb2eb5SJed Brown #include <petsc-private/petscimpl.h>  /*I   "petscsys.h"    I*/
6e5c89e4eSSatish Balay 
7e5c89e4eSSatish Balay #undef __FUNCT__
8*ce94432eSBarry Smith #define __FUNCT__ "PetscObjectComm"
9*ce94432eSBarry Smith /*@C
10*ce94432eSBarry Smith    PetscObjectComm - Gets the MPI communicator for any PetscObject   regardless of the type.
11*ce94432eSBarry Smith 
12*ce94432eSBarry Smith    Not Collective
13*ce94432eSBarry Smith 
14*ce94432eSBarry Smith    Input Parameter:
15*ce94432eSBarry Smith .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
16*ce94432eSBarry Smith          cast with a (PetscObject), for example,
17*ce94432eSBarry Smith          SETERRQ(PetscObjectComm((PetscObject)mat,...);
18*ce94432eSBarry Smith 
19*ce94432eSBarry Smith    Output Parameter:
20*ce94432eSBarry Smith .  comm - the MPI communicator or MPI_COMM_NULL if object is not valid
21*ce94432eSBarry Smith 
22*ce94432eSBarry Smith    Level: advanced
23*ce94432eSBarry Smith 
24*ce94432eSBarry Smith    Notes: Never use this in the form
25*ce94432eSBarry Smith $       comm = PetscObjectComm((PetscObject)obj);
26*ce94432eSBarry Smith         instead use PetscObjectGetComm()
27*ce94432eSBarry Smith 
28*ce94432eSBarry Smith    Concepts: communicator^getting from object
29*ce94432eSBarry Smith    Concepts: MPI communicator^getting from object
30*ce94432eSBarry Smith 
31*ce94432eSBarry Smith .seealso: PetscObjectGetComm()
32*ce94432eSBarry Smith @*/
33*ce94432eSBarry Smith MPI_Comm  PetscObjectComm(PetscObject obj)
34*ce94432eSBarry Smith {
35*ce94432eSBarry Smith   if (!obj) return MPI_COMM_NULL;
36*ce94432eSBarry Smith   return obj->comm;
37*ce94432eSBarry Smith }
38*ce94432eSBarry Smith 
39*ce94432eSBarry Smith #undef __FUNCT__
40e5c89e4eSSatish Balay #define __FUNCT__ "PetscObjectGetComm"
41e5c89e4eSSatish Balay /*@C
42e5c89e4eSSatish Balay    PetscObjectGetComm - Gets the MPI communicator for any PetscObject,
43e5c89e4eSSatish Balay    regardless of the type.
44e5c89e4eSSatish Balay 
45e5c89e4eSSatish Balay    Not Collective
46e5c89e4eSSatish Balay 
47e5c89e4eSSatish Balay    Input Parameter:
48e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
49e5c89e4eSSatish Balay          cast with a (PetscObject), for example,
50e5c89e4eSSatish Balay          PetscObjectGetComm((PetscObject)mat,&comm);
51e5c89e4eSSatish Balay 
52e5c89e4eSSatish Balay    Output Parameter:
53e5c89e4eSSatish Balay .  comm - the MPI communicator
54e5c89e4eSSatish Balay 
55e5c89e4eSSatish Balay    Level: advanced
56e5c89e4eSSatish Balay 
57e5c89e4eSSatish Balay    Concepts: communicator^getting from object
58e5c89e4eSSatish Balay    Concepts: MPI communicator^getting from object
59e5c89e4eSSatish Balay 
60*ce94432eSBarry Smith .seealso: PetscObjectComm()
61e5c89e4eSSatish Balay @*/
627087cfbeSBarry Smith PetscErrorCode  PetscObjectGetComm(PetscObject obj,MPI_Comm *comm)
63e5c89e4eSSatish Balay {
64e5c89e4eSSatish Balay   PetscErrorCode ierr;
65e5c89e4eSSatish Balay 
66e5c89e4eSSatish Balay   PetscFunctionBegin;
673cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
683cfa8680SLisandro Dalcin   PetscValidPointer(comm,2);
69e5c89e4eSSatish Balay   if (obj->bops->getcomm) {
70e5c89e4eSSatish Balay     ierr = obj->bops->getcomm(obj,comm);CHKERRQ(ierr);
71a297a907SKarl Rupp   } else *comm = obj->comm;
72e5c89e4eSSatish Balay   PetscFunctionReturn(0);
73e5c89e4eSSatish Balay }
74e5c89e4eSSatish Balay 
751cee3971SBarry Smith #undef __FUNCT__
761cee3971SBarry Smith #define __FUNCT__ "PetscObjectGetTabLevel"
77cbf1b8bfSBarry Smith /*@
781cee3971SBarry Smith    PetscObjectGetTabLevel - Gets the number of tabs that ASCII output for that object use
79e5c89e4eSSatish Balay 
801cee3971SBarry Smith    Not Collective
811cee3971SBarry Smith 
821cee3971SBarry Smith    Input Parameter:
831cee3971SBarry Smith .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
841cee3971SBarry Smith          cast with a (PetscObject), for example,
851cee3971SBarry Smith          PetscObjectGetComm((PetscObject)mat,&comm);
861cee3971SBarry Smith 
871cee3971SBarry Smith    Output Parameter:
881cee3971SBarry Smith .   tab - the number of tabs
891cee3971SBarry Smith 
901cee3971SBarry Smith    Level: developer
911cee3971SBarry Smith 
921cee3971SBarry Smith     Notes: this is used to manage the output from options that are imbedded in other objects. For example
931cee3971SBarry Smith       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
941cee3971SBarry Smith       is very clear.
951cee3971SBarry Smith 
961cee3971SBarry Smith .seealso:  PetscObjectIncrementTabLevel()
971cee3971SBarry Smith 
981cee3971SBarry Smith @*/
997087cfbeSBarry Smith PetscErrorCode  PetscObjectGetTabLevel(PetscObject obj,PetscInt *tab)
1001cee3971SBarry Smith {
1011cee3971SBarry Smith   PetscFunctionBegin;
1021cee3971SBarry Smith   PetscValidHeader(obj,1);
1031cee3971SBarry Smith   *tab = obj->tablevel;
1041cee3971SBarry Smith   PetscFunctionReturn(0);
1051cee3971SBarry Smith }
1061cee3971SBarry Smith 
10753c77d0aSJed Brown #undef __FUNCT__
108da35de2aSMatthew G Knepley #define __FUNCT__ "PetscObjectSetTabLevel"
109da35de2aSMatthew G Knepley /*@
110da35de2aSMatthew G Knepley    PetscObjectSetTabLevel - Sets the number of tabs that ASCII output for that object use
111da35de2aSMatthew G Knepley 
112da35de2aSMatthew G Knepley    Not Collective
113da35de2aSMatthew G Knepley 
114da35de2aSMatthew G Knepley    Input Parameters:
115da35de2aSMatthew G Knepley +  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
116da35de2aSMatthew G Knepley          cast with a (PetscObject), for example,
117da35de2aSMatthew G Knepley          PetscObjectGetComm((PetscObject)mat,&comm);
118da35de2aSMatthew G Knepley -   tab - the number of tabs
119da35de2aSMatthew G Knepley 
120da35de2aSMatthew G Knepley    Level: developer
121da35de2aSMatthew G Knepley 
122da35de2aSMatthew G Knepley     Notes: this is used to manage the output from options that are imbedded in other objects. For example
123da35de2aSMatthew G Knepley       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
124da35de2aSMatthew G Knepley       is very clear.
125da35de2aSMatthew G Knepley 
126da35de2aSMatthew G Knepley .seealso:  PetscObjectIncrementTabLevel()
127da35de2aSMatthew G Knepley @*/
128da35de2aSMatthew G Knepley PetscErrorCode  PetscObjectSetTabLevel(PetscObject obj,PetscInt tab)
129da35de2aSMatthew G Knepley {
130da35de2aSMatthew G Knepley   PetscFunctionBegin;
131da35de2aSMatthew G Knepley   PetscValidHeader(obj,1);
132da35de2aSMatthew G Knepley   obj->tablevel = tab;
133da35de2aSMatthew G Knepley   PetscFunctionReturn(0);
134da35de2aSMatthew G Knepley }
135da35de2aSMatthew G Knepley 
136da35de2aSMatthew G Knepley #undef __FUNCT__
13753c77d0aSJed Brown #define __FUNCT__ "PetscObjectIncrementTabLevel"
138cbf1b8bfSBarry Smith /*@
1391cee3971SBarry Smith    PetscObjectIncrementTabLevel - Sets the number of tabs that ASCII output for that object use based on
1401cee3971SBarry Smith          the tablevel of another object. This should be called immediately after the object is created.
1411cee3971SBarry Smith 
1421cee3971SBarry Smith    Not Collective
1431cee3971SBarry Smith 
1441cee3971SBarry Smith    Input Parameter:
1451cee3971SBarry Smith +  obj - any PETSc object where we are changing the tab
1461cee3971SBarry Smith .  oldobj - the object providing the tab
1471cee3971SBarry Smith -  tab - the increment that is added to the old objects tab
1481cee3971SBarry Smith 
1491cee3971SBarry Smith 
1501cee3971SBarry Smith    Level: developer
1511cee3971SBarry Smith 
1521cee3971SBarry Smith     Notes: this is used to manage the output from options that are imbedded in other objects. For example
1531cee3971SBarry Smith       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
1541cee3971SBarry Smith       is very clear.
1551cee3971SBarry Smith 
1561cee3971SBarry Smith .seealso:   PetscObjectSetLabLevel(),  PetscObjectGetTabLevel()
1571cee3971SBarry Smith 
1581cee3971SBarry Smith @*/
1597087cfbeSBarry Smith PetscErrorCode  PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)
1601cee3971SBarry Smith {
1611cee3971SBarry Smith 
1621cee3971SBarry Smith   PetscFunctionBegin;
1631cee3971SBarry Smith   PetscValidHeader(obj,1);
164a297a907SKarl Rupp   if (oldobj) obj->tablevel = oldobj->tablevel + tab;
165a297a907SKarl Rupp   else obj->tablevel = tab;
1661cee3971SBarry Smith   PetscFunctionReturn(0);
1671cee3971SBarry Smith }
168