xref: /petsc/src/sys/objects/gcomm.c (revision acdf4722463a5a0c5d33b9f1434a8aaa79721ee6)
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 
22ce94432eSBarry Smith    Notes: Never use this in the form
23ce94432eSBarry Smith $       comm = PetscObjectComm((PetscObject)obj);
24ce94432eSBarry Smith         instead use PetscObjectGetComm()
25ce94432eSBarry Smith 
26ce94432eSBarry Smith    Concepts: communicator^getting from object
27ce94432eSBarry Smith    Concepts: MPI communicator^getting from object
28ce94432eSBarry Smith 
29ce94432eSBarry Smith .seealso: PetscObjectGetComm()
30ce94432eSBarry Smith @*/
31ce94432eSBarry Smith MPI_Comm  PetscObjectComm(PetscObject obj)
32ce94432eSBarry Smith {
33ce94432eSBarry Smith   if (!obj) return MPI_COMM_NULL;
34ce94432eSBarry Smith   return obj->comm;
35ce94432eSBarry Smith }
36ce94432eSBarry Smith 
37e5c89e4eSSatish Balay /*@C
38e5c89e4eSSatish Balay    PetscObjectGetComm - Gets the MPI communicator for any PetscObject,
39e5c89e4eSSatish Balay    regardless of the type.
40e5c89e4eSSatish Balay 
41e5c89e4eSSatish Balay    Not Collective
42e5c89e4eSSatish Balay 
43e5c89e4eSSatish Balay    Input Parameter:
44e5c89e4eSSatish Balay .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
45e5c89e4eSSatish Balay          cast with a (PetscObject), for example,
46e5c89e4eSSatish Balay          PetscObjectGetComm((PetscObject)mat,&comm);
47e5c89e4eSSatish Balay 
48e5c89e4eSSatish Balay    Output Parameter:
49e5c89e4eSSatish Balay .  comm - the MPI communicator
50e5c89e4eSSatish Balay 
51e5c89e4eSSatish Balay    Level: advanced
52e5c89e4eSSatish Balay 
53e5c89e4eSSatish Balay    Concepts: communicator^getting from object
54e5c89e4eSSatish Balay    Concepts: MPI communicator^getting from object
55e5c89e4eSSatish Balay 
56ce94432eSBarry Smith .seealso: PetscObjectComm()
57e5c89e4eSSatish Balay @*/
587087cfbeSBarry Smith PetscErrorCode  PetscObjectGetComm(PetscObject obj,MPI_Comm *comm)
59e5c89e4eSSatish Balay {
60e5c89e4eSSatish Balay   PetscErrorCode ierr;
61e5c89e4eSSatish Balay 
62e5c89e4eSSatish Balay   PetscFunctionBegin;
633cfa8680SLisandro Dalcin   PetscValidHeader(obj,1);
643cfa8680SLisandro Dalcin   PetscValidPointer(comm,2);
65e5c89e4eSSatish Balay   if (obj->bops->getcomm) {
66e5c89e4eSSatish Balay     ierr = obj->bops->getcomm(obj,comm);CHKERRQ(ierr);
67a297a907SKarl Rupp   } else *comm = obj->comm;
68e5c89e4eSSatish Balay   PetscFunctionReturn(0);
69e5c89e4eSSatish Balay }
70e5c89e4eSSatish Balay 
71cbf1b8bfSBarry Smith /*@
721cee3971SBarry Smith    PetscObjectGetTabLevel - Gets the number of tabs that ASCII output for that object use
73e5c89e4eSSatish Balay 
741cee3971SBarry Smith    Not Collective
751cee3971SBarry Smith 
761cee3971SBarry Smith    Input Parameter:
771cee3971SBarry Smith .  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
781cee3971SBarry Smith          cast with a (PetscObject), for example,
791cee3971SBarry Smith          PetscObjectGetComm((PetscObject)mat,&comm);
801cee3971SBarry Smith 
811cee3971SBarry Smith    Output Parameter:
821cee3971SBarry Smith .   tab - the number of tabs
831cee3971SBarry Smith 
841cee3971SBarry Smith    Level: developer
851cee3971SBarry Smith 
861cee3971SBarry Smith     Notes: this is used to manage the output from options that are imbedded in other objects. For example
871cee3971SBarry Smith       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
881cee3971SBarry Smith       is very clear.
891cee3971SBarry Smith 
901cee3971SBarry Smith .seealso:  PetscObjectIncrementTabLevel()
911cee3971SBarry Smith 
921cee3971SBarry Smith @*/
937087cfbeSBarry Smith PetscErrorCode  PetscObjectGetTabLevel(PetscObject obj,PetscInt *tab)
941cee3971SBarry Smith {
951cee3971SBarry Smith   PetscFunctionBegin;
961cee3971SBarry Smith   PetscValidHeader(obj,1);
971cee3971SBarry Smith   *tab = obj->tablevel;
981cee3971SBarry Smith   PetscFunctionReturn(0);
991cee3971SBarry Smith }
1001cee3971SBarry Smith 
101da35de2aSMatthew G Knepley /*@
102da35de2aSMatthew G Knepley    PetscObjectSetTabLevel - Sets the number of tabs that ASCII output for that object use
103da35de2aSMatthew G Knepley 
104da35de2aSMatthew G Knepley    Not Collective
105da35de2aSMatthew G Knepley 
106da35de2aSMatthew G Knepley    Input Parameters:
107da35de2aSMatthew G Knepley +  obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be
108da35de2aSMatthew G Knepley          cast with a (PetscObject), for example,
109da35de2aSMatthew G Knepley          PetscObjectGetComm((PetscObject)mat,&comm);
110da35de2aSMatthew G Knepley -   tab - the number of tabs
111da35de2aSMatthew G Knepley 
112da35de2aSMatthew G Knepley    Level: developer
113da35de2aSMatthew G Knepley 
114da35de2aSMatthew G Knepley     Notes: this is used to manage the output from options that are imbedded in other objects. For example
115da35de2aSMatthew G Knepley       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
116da35de2aSMatthew G Knepley       is very clear.
117da35de2aSMatthew G Knepley 
118da35de2aSMatthew G Knepley .seealso:  PetscObjectIncrementTabLevel()
119da35de2aSMatthew G Knepley @*/
120da35de2aSMatthew G Knepley PetscErrorCode  PetscObjectSetTabLevel(PetscObject obj,PetscInt tab)
121da35de2aSMatthew G Knepley {
122da35de2aSMatthew G Knepley   PetscFunctionBegin;
123da35de2aSMatthew G Knepley   PetscValidHeader(obj,1);
124da35de2aSMatthew G Knepley   obj->tablevel = tab;
125da35de2aSMatthew G Knepley   PetscFunctionReturn(0);
126da35de2aSMatthew G Knepley }
127da35de2aSMatthew G Knepley 
128cbf1b8bfSBarry Smith /*@
1291cee3971SBarry Smith    PetscObjectIncrementTabLevel - Sets the number of tabs that ASCII output for that object use based on
1301cee3971SBarry Smith          the tablevel of another object. This should be called immediately after the object is created.
1311cee3971SBarry Smith 
1321cee3971SBarry Smith    Not Collective
1331cee3971SBarry Smith 
1341cee3971SBarry Smith    Input Parameter:
1351cee3971SBarry Smith +  obj - any PETSc object where we are changing the tab
1361cee3971SBarry Smith .  oldobj - the object providing the tab
1371cee3971SBarry Smith -  tab - the increment that is added to the old objects tab
1381cee3971SBarry Smith 
1391cee3971SBarry Smith 
1401cee3971SBarry Smith    Level: developer
1411cee3971SBarry Smith 
1421cee3971SBarry Smith     Notes: this is used to manage the output from options that are imbedded in other objects. For example
1431cee3971SBarry Smith       the KSP object inside a SNES object. By indenting each lower level further the heirarchy of objects
1441cee3971SBarry Smith       is very clear.
1451cee3971SBarry Smith 
146*acdf4722SStefano Zampini .seealso:   PetscObjectSetTabLevel(),  PetscObjectGetTabLevel()
1471cee3971SBarry Smith 
1481cee3971SBarry Smith @*/
1497087cfbeSBarry Smith PetscErrorCode  PetscObjectIncrementTabLevel(PetscObject obj,PetscObject oldobj,PetscInt tab)
1501cee3971SBarry Smith {
1511cee3971SBarry Smith 
1521cee3971SBarry Smith   PetscFunctionBegin;
1531cee3971SBarry Smith   PetscValidHeader(obj,1);
154a297a907SKarl Rupp   if (oldobj) obj->tablevel = oldobj->tablevel + tab;
155a297a907SKarl Rupp   else obj->tablevel = tab;
1561cee3971SBarry Smith   PetscFunctionReturn(0);
1571cee3971SBarry Smith }
158