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 2295452b02SPatrick Sanan Notes: 2395452b02SPatrick Sanan Never use this in the form 24ce94432eSBarry Smith $ comm = PetscObjectComm((PetscObject)obj); 25ce94432eSBarry Smith instead use PetscObjectGetComm() 26ce94432eSBarry Smith 27db781477SPatrick Sanan .seealso: `PetscObjectGetComm()` 28ce94432eSBarry Smith @*/ 29*9371c9d4SSatish Balay MPI_Comm PetscObjectComm(PetscObject obj) { 305f80ce2aSJacob Faibussowitsch return obj ? obj->comm : MPI_COMM_NULL; 31ce94432eSBarry Smith } 32ce94432eSBarry Smith 33e5c89e4eSSatish Balay /*@C 34e5c89e4eSSatish Balay PetscObjectGetComm - Gets the MPI communicator for any PetscObject, 35e5c89e4eSSatish Balay regardless of the type. 36e5c89e4eSSatish Balay 37e5c89e4eSSatish Balay Not Collective 38e5c89e4eSSatish Balay 39e5c89e4eSSatish Balay Input Parameter: 40e5c89e4eSSatish Balay . obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be 41e5c89e4eSSatish Balay cast with a (PetscObject), for example, 42e5c89e4eSSatish Balay PetscObjectGetComm((PetscObject)mat,&comm); 43e5c89e4eSSatish Balay 44e5c89e4eSSatish Balay Output Parameter: 45e5c89e4eSSatish Balay . comm - the MPI communicator 46e5c89e4eSSatish Balay 47e5c89e4eSSatish Balay Level: advanced 48e5c89e4eSSatish Balay 49db781477SPatrick Sanan .seealso: `PetscObjectComm()` 50e5c89e4eSSatish Balay @*/ 51*9371c9d4SSatish Balay PetscErrorCode PetscObjectGetComm(PetscObject obj, MPI_Comm *comm) { 52e5c89e4eSSatish Balay PetscFunctionBegin; 533cfa8680SLisandro Dalcin PetscValidHeader(obj, 1); 543cfa8680SLisandro Dalcin PetscValidPointer(comm, 2); 559566063dSJacob Faibussowitsch if (obj->bops->getcomm) PetscCall(obj->bops->getcomm(obj, comm)); 565f80ce2aSJacob Faibussowitsch else *comm = obj->comm; 57e5c89e4eSSatish Balay PetscFunctionReturn(0); 58e5c89e4eSSatish Balay } 59e5c89e4eSSatish Balay 60cbf1b8bfSBarry Smith /*@ 611cee3971SBarry Smith PetscObjectGetTabLevel - Gets the number of tabs that ASCII output for that object use 62e5c89e4eSSatish Balay 631cee3971SBarry Smith Not Collective 641cee3971SBarry Smith 651cee3971SBarry Smith Input Parameter: 661cee3971SBarry Smith . obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be 671cee3971SBarry Smith cast with a (PetscObject), for example, 681cee3971SBarry Smith PetscObjectGetComm((PetscObject)mat,&comm); 691cee3971SBarry Smith 701cee3971SBarry Smith Output Parameter: 711cee3971SBarry Smith . tab - the number of tabs 721cee3971SBarry Smith 731cee3971SBarry Smith Level: developer 741cee3971SBarry Smith 7595452b02SPatrick Sanan Notes: 766aad120cSJose E. Roman this is used to manage the output from options that are embedded in other objects. For example 77a5b23f4aSJose E. Roman the KSP object inside a SNES object. By indenting each lower level further the hierarchy of objects 781cee3971SBarry Smith is very clear. 791cee3971SBarry Smith 80db781477SPatrick Sanan .seealso: `PetscObjectIncrementTabLevel()` 811cee3971SBarry Smith 821cee3971SBarry Smith @*/ 83*9371c9d4SSatish Balay PetscErrorCode PetscObjectGetTabLevel(PetscObject obj, PetscInt *tab) { 841cee3971SBarry Smith PetscFunctionBegin; 851cee3971SBarry Smith PetscValidHeader(obj, 1); 865f80ce2aSJacob Faibussowitsch PetscValidIntPointer(tab, 2); 871cee3971SBarry Smith *tab = obj->tablevel; 881cee3971SBarry Smith PetscFunctionReturn(0); 891cee3971SBarry Smith } 901cee3971SBarry Smith 91da35de2aSMatthew G Knepley /*@ 92da35de2aSMatthew G Knepley PetscObjectSetTabLevel - Sets the number of tabs that ASCII output for that object use 93da35de2aSMatthew G Knepley 94da35de2aSMatthew G Knepley Not Collective 95da35de2aSMatthew G Knepley 96da35de2aSMatthew G Knepley Input Parameters: 97da35de2aSMatthew G Knepley + obj - any PETSc object, for example a Vec, Mat or KSP. Thus must be 98da35de2aSMatthew G Knepley cast with a (PetscObject), for example, 99da35de2aSMatthew G Knepley PetscObjectGetComm((PetscObject)mat,&comm); 100da35de2aSMatthew G Knepley - tab - the number of tabs 101da35de2aSMatthew G Knepley 102da35de2aSMatthew G Knepley Level: developer 103da35de2aSMatthew G Knepley 10495452b02SPatrick Sanan Notes: 1056aad120cSJose E. Roman this is used to manage the output from options that are embedded in other objects. For example 106a5b23f4aSJose E. Roman the KSP object inside a SNES object. By indenting each lower level further the hierarchy of objects 107da35de2aSMatthew G Knepley is very clear. 108da35de2aSMatthew G Knepley 109db781477SPatrick Sanan .seealso: `PetscObjectIncrementTabLevel()` 110da35de2aSMatthew G Knepley @*/ 111*9371c9d4SSatish Balay PetscErrorCode PetscObjectSetTabLevel(PetscObject obj, PetscInt tab) { 112da35de2aSMatthew G Knepley PetscFunctionBegin; 113da35de2aSMatthew G Knepley PetscValidHeader(obj, 1); 114da35de2aSMatthew G Knepley obj->tablevel = tab; 115da35de2aSMatthew G Knepley PetscFunctionReturn(0); 116da35de2aSMatthew G Knepley } 117da35de2aSMatthew G Knepley 118cbf1b8bfSBarry Smith /*@ 1191cee3971SBarry Smith PetscObjectIncrementTabLevel - Sets the number of tabs that ASCII output for that object use based on 1201cee3971SBarry Smith the tablevel of another object. This should be called immediately after the object is created. 1211cee3971SBarry Smith 1221cee3971SBarry Smith Not Collective 1231cee3971SBarry Smith 124d8d19677SJose E. Roman Input Parameters: 1251cee3971SBarry Smith + obj - any PETSc object where we are changing the tab 1261cee3971SBarry Smith . oldobj - the object providing the tab 1271cee3971SBarry Smith - tab - the increment that is added to the old objects tab 1281cee3971SBarry Smith 1291cee3971SBarry Smith Level: developer 1301cee3971SBarry Smith 13195452b02SPatrick Sanan Notes: 1326aad120cSJose E. Roman this is used to manage the output from options that are embedded in other objects. For example 133a5b23f4aSJose E. Roman the KSP object inside a SNES object. By indenting each lower level further the hierarchy of objects 1341cee3971SBarry Smith is very clear. 1351cee3971SBarry Smith 136db781477SPatrick Sanan .seealso: `PetscObjectSetTabLevel()`, `PetscObjectGetTabLevel()` 1371cee3971SBarry Smith 1381cee3971SBarry Smith @*/ 139*9371c9d4SSatish Balay PetscErrorCode PetscObjectIncrementTabLevel(PetscObject obj, PetscObject oldobj, PetscInt tab) { 1401cee3971SBarry Smith PetscFunctionBegin; 1411cee3971SBarry Smith PetscValidHeader(obj, 1); 1425f80ce2aSJacob Faibussowitsch if (oldobj) PetscValidHeader(oldobj, 2); 1435f80ce2aSJacob Faibussowitsch obj->tablevel = (oldobj ? oldobj->tablevel : 0) + tab; 1441cee3971SBarry Smith PetscFunctionReturn(0); 1451cee3971SBarry Smith } 146