18 #ifndef __PETSCSPARTOBJ_HPP__
19 #define __PETSCSPARTOBJ_HPP__
23 return reinterpret_cast<PetscObject
>(obj);
59 CHKERRABORT(comm,
ierr);
61 ierr = PetscObjectDestroy(
reinterpret_cast<PetscObject *
>(&obj));
62 CHKERRABORT(comm,
ierr);
82 template <
typename OBJ>
84 :
public boost::intrusive_ptr<typename std::remove_pointer<OBJ>::type> {
87 : boost::intrusive_ptr<typename std::remove_pointer<OBJ>::
type>() {}
89 : boost::intrusive_ptr<typename std::remove_pointer<OBJ>::
type>(
o,
92 operator OBJ() {
return this->get(); }
93 explicit operator PetscObject() {
94 return reinterpret_cast<PetscObject
>(this->get());
131 ierr = DMCreate(comm, &dm);
132 CHKERRABORT(comm,
ierr);
133 ierr = DMSetType(dm, dm_type_name.c_str());
134 CHKERRABORT(comm,
ierr);
146 ierr = PetscObjectGetComm(obj, &comm);
147 CHKERRABORT(PETSC_COMM_SELF,
ierr);
164 PetscInt nghost,
const PetscInt ghosts[]) {
166 ierr = VecCreateGhost(comm,
n,
N, nghost, ghosts, &vv);
167 CHKERRABORT(comm,
ierr);
181 ierr = VecCreateMPI(comm,
n,
N, &vv);
182 CHKERRABORT(comm,
ierr);
196 ierr = VecDuplicate(vec, &duplicate);
197 CHKERRABORT(PETSC_COMM_SELF,
ierr);
206 ierr = VecDuplicate(vec, &duplicate);
207 CHKERRABORT(PETSC_COMM_SELF,
ierr);
213 ierr = MatDuplicate(mat, op, &duplicate);
214 CHKERRABORT(PETSC_COMM_SELF,
ierr);
219 MatDuplicateOption op) {
222 ierr = MatDuplicate(mat, op, &duplicate);
223 CHKERRABORT(PETSC_COMM_SELF,
ierr);
232 ierr = TSCreate(comm, &ts);
233 CHKERRABORT(comm,
ierr);
239 ierr = SNESCreate(comm, &snes);
240 CHKERRABORT(comm,
ierr);
246 ierr = KSPCreate(comm, &ksp);
247 CHKERRABORT(comm,
ierr);
253 ierr = PCCreate(comm, &pc);
254 CHKERRABORT(comm,
ierr);
void intrusive_ptr_add_ref(OBJ obj)
It is used by intrusive_ptr to bump reference.
void intrusive_ptr_release(OBJ obj)
It is used by intrusive_ptr to dereference and destroy petsc object.
const FTensor::Tensor2< T, Dim, Dim > Vec
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
implementation of Data Operators for Forces and Sources
MPI_Comm getCommFromPetscObject(PetscObject obj)
Get the Comm From Petsc Object object.
auto createSmartDM
Creates smart DM object.
auto createSmartGhostVector
Create smart ghost vector.
auto createSmartVectorMPI
Create MPI Vector.
SmartPetscObj< Mat > smartMatDuplicate(Mat &mat, MatDuplicateOption op)
PetscObject getPetscObject(T obj)
SmartPetscObj< Vec > smartVectorDuplicate(SmartPetscObj< Vec > &vec)
Create duplicate vector of smart vector.
intrusive_ptr for managing petsc objects
SmartPetscObj(OBJ o, bool add_ref=false)