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