xref: /petsc/src/sys/objects/gcomm.c (revision 95452b02e12c0ee11232c7ff2b24b568a8e07e43)
17d0a6c19SBarry Smith 
2e5c89e4eSSatish Balay /*
3e5c89e4eSSatish Balay      Provides utility routines for manulating any type of PETSc object.
4e5c89e4eSSatish Balay */
5af0996ceSBarry Smith #include <petsc/private/petscimpl.h>  /*I   "petscsys.h"    I*/
6e5c89e4eSSatish Balay 
7ce94432eSBarry Smith /*@C
8ce94432eSBarry Smith    PetscObjectComm - Gets the MPI communicator for any PetscObject   regardless of the type.
9ce94432eSBarry Smith 
10ce94432eSBarry Smith    Not Collective
11ce94432eSBarry Smith 
12ce94432eSBarry Smith    Input Parameter:
13ce94432eSBarry Smith .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
14ce94432eSBarry Smith          cast with a (PetscObject), for example,
15ce94432eSBarry Smith          SETERRQ(PetscObjectComm((PetscObject)mat,...);
16ce94432eSBarry Smith 
17ce94432eSBarry Smith    Output Parameter:
18ce94432eSBarry Smith .  comm - the MPI communicator or MPI_COMM_NULL if object is not valid
19ce94432eSBarry Smith 
20ce94432eSBarry Smith    Level: advanced
21ce94432eSBarry Smith 
22*95452b02SPatrick Sanan    Notes:
23*95452b02SPatrick Sanan     Never use this in the form
24ce94432eSBarry Smith $       comm = PetscObjectComm((PetscObject)obj);
25ce94432eSBarry Smith         instead use PetscObjectGetComm()
26ce94432eSBarry Smith 
27ce94432eSBarry Smith    Concepts: communicator^getting from object
28ce94432eSBarry Smith    Concepts: MPI communicator^getting from object
29ce94432eSBarry Smith 
30ce94432eSBarry Smith .seealso: PetscObjectGetComm()
31ce94432eSBarry Smith @*/
32ce94432eSBarry Smith MPI_Comm  PetscObjectComm(PetscObject obj)
33ce94432eSBarry Smith {
34ce94432eSBarry Smith   if (!obj) return MPI_COMM_NULL;
35ce94432eSBarry Smith   return obj->comm;
36ce94432eSBarry Smith }
37ce94432eSBarry Smith 
38e5c89e4eSSatish Balay /*@C
39e5c89e4eSSatish Balay    PetscObjectGetComm - Gets the MPI communicator for any PetscObject,
40e5c89e4eSSatish Balay    regardless of the type.
41e5c89e4eSSatish Balay 
42e5c89e4eSSatish Balay    Not Collective
43e5c89e4eSSatish Balay 
44e5c89e4eSSatish Balay    Input Parameter:
45e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
46e5c89e4eSSatish Balay          cast with a (PetscObject), for example,
47e5c89e4eSSatish Balay          PetscObjectGetComm((PetscObject)mat,&comm);
48e5c89e4eSSatish Balay 
49e5c89e4eSSatish Balay    Output Parameter:
50e5c89e4eSSatish Balay .  comm - the MPI communicator
51e5c89e4eSSatish Balay 
52e5c89e4eSSatish Balay    Level: advanced
53e5c89e4eSSatish Balay 
54e5c89e4eSSatish Balay    Concepts: communicator^getting from object
55e5c89e4eSSatish Balay    Concepts: MPI communicator^getting from object
56e5c89e4eSSatish Balay 
57ce94432eSBarry Smith .seealso: PetscObjectComm()
58e5c89e4eSSatish Balay @*/
597087cfbeSBarry Smith PetscErrorCode  PetscObjectGetComm(PetscObject obj,MPI_Comm *comm)
60e5c89e4eSSatish Balay {
61e5c89e4eSSatish Balay   PetscErrorCode ierr;
62e5c89e4eSSatish Balay 
63e5c89e4eSSatish Balay   PetscFunctionBegin;
643cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
653cfa8680SLisandro Dalcin   PetscValidPointer(comm,2);
66e5c89e4eSSatish Balay   if (obj->bops->getcomm) {
67e5c89e4eSSatish Balay     ierr = obj->bops->getcomm(obj,comm);CHKERRQ(ierr);
68a297a907SKarl Rupp   } else *comm = obj->comm;
69e5c89e4eSSatish Balay   PetscFunctionReturn(0);
70e5c89e4eSSatish Balay }
71e5c89e4eSSatish Balay 
72cbf1b8bfSBarry Smith /*@
731cee3971SBarry Smith    PetscObjectGetTabLevel - Gets the number of tabs that ASCII output for that object use
74e5c89e4eSSatish Balay 
751cee3971SBarry Smith    Not Collective
761cee3971SBarry Smith 
771cee3971SBarry Smith    Input Parameter:
781cee3971SBarry Smith .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
791cee3971SBarry Smith          cast with a (PetscObject), for example,
801cee3971SBarry Smith          PetscObjectGetComm((PetscObject)mat,&comm);
811cee3971SBarry Smith 
821cee3971SBarry Smith    Output Parameter:
831cee3971SBarry Smith .   tab - the number of tabs
841cee3971SBarry Smith 
851cee3971SBarry Smith    Level: developer
861cee3971SBarry Smith 
87*95452b02SPatrick Sanan     Notes:
88*95452b02SPatrick Sanan     this is used to manage the output from options that are imbedded in other objects. For example
891cee3971SBarry Smith       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
901cee3971SBarry Smith       is very clear.
911cee3971SBarry Smith 
921cee3971SBarry Smith .seealso:  PetscObjectIncrementTabLevel()
931cee3971SBarry Smith 
941cee3971SBarry Smith @*/
957087cfbeSBarry Smith PetscErrorCode  PetscObjectGetTabLevel(PetscObject obj,PetscInt *tab)
961cee3971SBarry Smith {
971cee3971SBarry Smith   PetscFunctionBegin;
981cee3971SBarry Smith   PetscValidHeader(obj,1);
991cee3971SBarry Smith   *tab = obj->tablevel;
1001cee3971SBarry Smith   PetscFunctionReturn(0);
1011cee3971SBarry Smith }
1021cee3971SBarry Smith 
103da35de2aSMatthew G Knepley /*@
104da35de2aSMatthew G Knepley    PetscObjectSetTabLevel - Sets the number of tabs that ASCII output for that object use
105da35de2aSMatthew G Knepley 
106da35de2aSMatthew G Knepley    Not Collective
107da35de2aSMatthew G Knepley 
108da35de2aSMatthew G Knepley    Input Parameters:
109da35de2aSMatthew G Knepley +  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
110da35de2aSMatthew G Knepley          cast with a (PetscObject), for example,
111da35de2aSMatthew G Knepley          PetscObjectGetComm((PetscObject)mat,&comm);
112da35de2aSMatthew G Knepley -   tab - the number of tabs
113da35de2aSMatthew G Knepley 
114da35de2aSMatthew G Knepley    Level: developer
115da35de2aSMatthew G Knepley 
116*95452b02SPatrick Sanan     Notes:
117*95452b02SPatrick Sanan     this is used to manage the output from options that are imbedded in other objects. For example
118da35de2aSMatthew G Knepley       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
119da35de2aSMatthew G Knepley       is very clear.
120da35de2aSMatthew G Knepley 
121da35de2aSMatthew G Knepley .seealso:  PetscObjectIncrementTabLevel()
122da35de2aSMatthew G Knepley @*/
123da35de2aSMatthew G Knepley PetscErrorCode  PetscObjectSetTabLevel(PetscObject obj,PetscInt tab)
124da35de2aSMatthew G Knepley {
125da35de2aSMatthew G Knepley   PetscFunctionBegin;
126da35de2aSMatthew G Knepley   PetscValidHeader(obj,1);
127da35de2aSMatthew G Knepley   obj->tablevel = tab;
128da35de2aSMatthew G Knepley   PetscFunctionReturn(0);
129da35de2aSMatthew G Knepley }
130da35de2aSMatthew G Knepley 
131cbf1b8bfSBarry Smith /*@
1321cee3971SBarry Smith    PetscObjectIncrementTabLevel - Sets the number of tabs that ASCII output for that object use based on
1331cee3971SBarry Smith          the tablevel of another object. This should be called immediately after the object is created.
1341cee3971SBarry Smith 
1351cee3971SBarry Smith    Not Collective
1361cee3971SBarry Smith 
1371cee3971SBarry Smith    Input Parameter:
1381cee3971SBarry Smith +  obj - any PETSc object where we are changing the tab
1391cee3971SBarry Smith .  oldobj - the object providing the tab
1401cee3971SBarry Smith -  tab - the increment that is added to the old objects tab
1411cee3971SBarry Smith 
1421cee3971SBarry Smith 
1431cee3971SBarry Smith    Level: developer
1441cee3971SBarry Smith 
145*95452b02SPatrick Sanan     Notes:
146*95452b02SPatrick Sanan     this is used to manage the output from options that are imbedded in other objects. For example
1471cee3971SBarry Smith       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
1481cee3971SBarry Smith       is very clear.
1491cee3971SBarry Smith 
1501cee3971SBarry Smith .seealso:   PetscObjectSetLabLevel(),  PetscObjectGetTabLevel()
1511cee3971SBarry Smith 
1521cee3971SBarry Smith @*/
1537087cfbeSBarry Smith PetscErrorCode  PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)
1541cee3971SBarry Smith {
1551cee3971SBarry Smith 
1561cee3971SBarry Smith   PetscFunctionBegin;
1571cee3971SBarry Smith   PetscValidHeader(obj,1);
158a297a907SKarl Rupp   if (oldobj) obj->tablevel = oldobj->tablevel + tab;
159a297a907SKarl Rupp   else obj->tablevel = tab;
1601cee3971SBarry Smith   PetscFunctionReturn(0);
1611cee3971SBarry Smith }
162