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