6#ifndef __PETSCSPARTOBJ_HPP__
7#define __PETSCSPARTOBJ_HPP__
11 return reinterpret_cast<PetscObject
>(obj);
50 ierr = PetscObjectDestroy(
reinterpret_cast<PetscObject *
>(&obj));
54 CHKERRABORT(comm,
ierr);
83template <
typename OBJ>
85 :
public boost::intrusive_ptr<typename std::remove_pointer<OBJ>::type> {
87 using Derived = boost::intrusive_ptr<typename std::remove_pointer<OBJ>::type>;
89 using Derived::Derived;
102 : boost::intrusive_ptr<typename
std::remove_pointer<OBJ>::type>(o,
106 operator OBJ() {
return this->get(); }
107 explicit operator PetscObject() {
108 return reinterpret_cast<PetscObject
>(this->get());
143inline auto createDM(MPI_Comm comm,
const std::string dm_type_name) {
152 const std::string dm_type_name) {
153 return createDM(comm, dm_type_name);
165 "Failed to get comm from PETSc object");
182 PetscInt nghost,
const PetscInt ghosts[]) {
185 "Failed to create ghosted Vec");
191 PetscInt
N, PetscInt nghost,
192 const PetscInt ghosts[]) {
239 "Failed to duplicate Mat");
247 MatDuplicateOption op) {
296 PetscCopyMode mode) {
329 "Failed to create AO");
347 const PetscInt myapp[],
const PetscInt mypetsc[]) {
392 ISLocalToGlobalMapping map_raw;
394 "create local to global mapping");
void intrusive_ptr_release< TS >(TS obj)
void intrusive_ptr_release< AO >(AO obj)
void intrusive_ptr_release< KSP >(KSP obj)
void intrusive_ptr_release< Tao >(Tao obj)
void intrusive_ptr_release< Vec >(Vec obj)
void intrusive_ptr_release< DM >(DM obj)
void intrusive_ptr_release< IS >(IS obj)
void intrusive_ptr_add_ref(OBJ obj)
It is used by intrusive_ptr to bump reference.
void intrusive_ptr_release< SNES >(SNES obj)
void intrusive_ptr_release< Mat >(Mat obj)
void intrusive_ptr_release(OBJ obj)
It is used by intrusive_ptr to dereference and destroy petsc object.
static PetscErrorCode ierr
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
const double n
refractive index of diffusive medium
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
implementation of Data Operators for Forces and Sources
auto createISLocalToGlobalMapping(IS is)
MPI_Comm getCommFromPetscObject(PetscObject obj)
Get the Comm From Petsc Object object.
auto createKSP(MPI_Comm comm)
auto createSNES(MPI_Comm comm)
auto isAllGather(IS is)
IS All gather.
DEPRECATED SmartPetscObj< Vec > smartVectorDuplicate(Vec vec)
DEPRECATED auto createSmartDM(MPI_Comm comm, const std::string dm_type_name)
auto matCreateVecs(Mat mat)
auto createISGeneral(MPI_Comm comm, PetscInt n, const PetscInt idx[], PetscCopyMode mode)
Creates a data structure for an index set containing a list of integers.
SmartPetscObj< Vec > vectorDuplicate(Vec vec)
Create duplicate vector of smart vector.
auto createAOMapping(MPI_Comm comm, PetscInt napp, const PetscInt myapp[], const PetscInt mypetsc[])
Creates an application mapping using two integer arrays.
auto createVecScatter(Vec x, IS ix, Vec y, IS iy)
Create a Vec Scatter object.
auto createVectorMPI(MPI_Comm comm, PetscInt n, PetscInt N)
Create MPI Vector.
auto createTS(MPI_Comm comm)
DEPRECATED auto createSmartGhostVector(MPI_Comm comm, PetscInt n, PetscInt N, PetscInt nghost, const PetscInt ghosts[])
auto createPC(MPI_Comm comm)
auto createAOMappingIS(IS isapp, IS ispetsc)
Creates an application mapping using two index sets.
auto createGhostVector(MPI_Comm comm, PetscInt n, PetscInt N, PetscInt nghost, const PetscInt ghosts[])
Create smart ghost vector.
PetscObject getPetscObject(T obj)
DEPRECATED SmartPetscObj< Mat > smartMatDuplicate(Mat mat, MatDuplicateOption op)
auto isDifference(IS is1, IS is2)
Get ISDifference.
SmartPetscObj< Mat > matDuplicate(Mat mat, MatDuplicateOption op)
auto createDM(MPI_Comm comm, const std::string dm_type_name)
Creates smart DM object.
auto createTao(MPI_Comm comm)
DEPRECATED auto createSmartVectorMPI(MPI_Comm comm, PetscInt n, PetscInt N)
intrusive_ptr for managing petsc objects
SmartPetscObj(std::nullptr_t ptr)
SmartPetscObj(OBJ o, bool add_ref=false)
Construct a new Smart Petsc Obj object.
boost::intrusive_ptr< typename std::remove_pointer< OBJ >::type > Derived