v0.15.0
Loading...
Searching...
No Matches
MoFEM::SmartPetscObj< OBJ > Struct Template Reference

intrusive_ptr for managing petsc objects More...

#include "include/PetscSmartObj.hpp"

Inheritance diagram for MoFEM::SmartPetscObj< OBJ >:
[legend]
Collaboration diagram for MoFEM::SmartPetscObj< OBJ >:
[legend]

Public Types

using Derived = boost::intrusive_ptr<typename std::remove_pointer<OBJ>::type>
 

Public Member Functions

 SmartPetscObj (std::nullptr_t ptr)
 
 SmartPetscObj (OBJ o, bool add_ref=false)
 Construct a new Smart Petsc Obj object.
 
 operator OBJ ()
 
 operator PetscObject ()
 
int use_count () const
 

Detailed Description

template<typename OBJ>
struct MoFEM::SmartPetscObj< OBJ >

intrusive_ptr for managing petsc objects

It manages destruction, referencing and dereferencing petsc objects. It is similar how smart_ptr pointers works, but applied for petsc objects like Vec, DM, Mat, etc.

DEPRECATED auto createSmartGhostVector(MPI_Comm comm, PetscInt n, PetscInt N, PetscInt nghost, const PetscInt ghosts[])
intrusive_ptr for managing petsc objects
Template Parameters
OBJ
Examples
EshelbianPlasticity.cpp, HookeElement.cpp, adolc_plasticity.cpp, approx_sphere.cpp, build_large_problem.cpp, child_and_parent.cpp, dg_projection.cpp, dm_build_partitioned_mesh.cpp, dynamic_first_order_con_law.cpp, eigen_elastic.cpp, elasticity.cpp, ep.cpp, free_surface.cpp, hanging_node_approx.cpp, heat_equation.cpp, higher_derivatives.cpp, level_set.cpp, mixed_poisson.cpp, mofem/tutorials/vec-7/adjoint.cpp, navier_stokes.cpp, operators_tests.cpp, petsc_smart_ptr_objects.cpp, photon_diffusion.cpp, plastic.cpp, poisson_2d_homogeneous.cpp, prism_polynomial_approximation.cpp, quad_polynomial_approximation.cpp, reaction_diffusion.cpp, remove_entities_from_problem.cpp, remove_entities_from_problem_not_partitioned.cpp, schur_test_diag_mat.cpp, seepage.cpp, shallow_wave.cpp, tensor_divergence_operator.cpp, test_broken_space.cpp, test_cache_on_entities.cpp, thermo_elastic.cpp, and wave_equation.cpp.

Definition at line 84 of file PetscSmartObj.hpp.

Member Typedef Documentation

◆ Derived

template<typename OBJ >
using MoFEM::SmartPetscObj< OBJ >::Derived = boost::intrusive_ptr<typename std::remove_pointer<OBJ>::type>

Definition at line 87 of file PetscSmartObj.hpp.

Constructor & Destructor Documentation

◆ SmartPetscObj() [1/2]

template<typename OBJ >
MoFEM::SmartPetscObj< OBJ >::SmartPetscObj ( std::nullptr_t ptr)
inline

Definition at line 91 of file PetscSmartObj.hpp.

91: SmartPetscObj() {}
SmartPetscObj(std::nullptr_t ptr)

◆ SmartPetscObj() [2/2]

template<typename OBJ >
MoFEM::SmartPetscObj< OBJ >::SmartPetscObj ( OBJ o,
bool add_ref = false )
inlineexplicit

Construct a new Smart Petsc Obj object.

Note
If add_red is set to true, you have to destroy OBJ.
Parameters
o
add_ref// if false ownership of OBJ is taken by SmartPetscObj

Definition at line 101 of file PetscSmartObj.hpp.

102 : boost::intrusive_ptr<typename std::remove_pointer<OBJ>::type>(o,
103 add_ref) {
104 }

Member Function Documentation

◆ operator OBJ()

template<typename OBJ >
MoFEM::SmartPetscObj< OBJ >::operator OBJ ( )
inline

Definition at line 106 of file PetscSmartObj.hpp.

106{ return this->get(); }

◆ operator PetscObject()

template<typename OBJ >
MoFEM::SmartPetscObj< OBJ >::operator PetscObject ( )
inlineexplicit

Definition at line 107 of file PetscSmartObj.hpp.

107 {
108 return reinterpret_cast<PetscObject>(this->get());
109 }

◆ use_count()

template<typename OBJ >
int MoFEM::SmartPetscObj< OBJ >::use_count ( ) const
inline
Examples
EshelbianPlasticity.cpp, and petsc_smart_ptr_objects.cpp.

Definition at line 111 of file PetscSmartObj.hpp.

111 {
112 if (this->get()) {
113 int cnt;
114 ierr = PetscObjectGetReference(getPetscObject(this->get()), &cnt);
115 CHKERRABORT(PetscObjectComm(getPetscObject(this->get())), ierr);
116 return cnt;
117 } else
118 return 0;
119 }
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
PetscObject getPetscObject(T obj)

The documentation for this struct was generated from the following file: