v0.15.5
Loading...
Searching...
No Matches
AuxPETSc.hpp
Go to the documentation of this file.
1/** \file AuxPETSc.hpp
2 * \brief Auxiliary MoFEM-PETSc structures
3 */
4
5
6
7#ifndef __AUXPETSC_HPP__
8#define __AUXPETSC_HPP__
9
10namespace MoFEM {
11
12struct PairNameFEMethodPtr : public std::pair<std::string, FEMethod *> {
13
14 PairNameFEMethodPtr(std::string name, FEMethod *ptr)
15 : std::pair<std::string, FEMethod *>(name, ptr) {}
16 template <typename FEMETHOD>
17 PairNameFEMethodPtr(std::string name, boost::shared_ptr<FEMETHOD> ptr)
18 : std::pair<std::string, FEMethod *>(name, ptr.get()), fePtr(ptr) {}
19
20 virtual ~PairNameFEMethodPtr() = default;
21
22 inline boost::shared_ptr<BasicMethod> getSharedPtr() const {
23 if (!fePtr)
24 THROW_MESSAGE("Shared pointer not set. You have to be using raw "
25 "pointer, that is unsafe.");
26 return fePtr;
27 }
28
29private:
30 boost::shared_ptr<FEMethod> fePtr;
31};
32
35 template <typename BASICMETHOD>
36 BasicMethodPtr(boost::shared_ptr<BASICMETHOD> ptr)
37 : rawPtr(ptr.get()), bmPtr(ptr) {}
38
39 virtual ~BasicMethodPtr() = default;
40
41 inline BasicMethod &operator*() const { return *rawPtr; };
42 inline BasicMethod *operator->() const { return rawPtr; }
43 inline BasicMethod *get() const { return rawPtr; }
44
45 inline boost::shared_ptr<BasicMethod> getSharedPtr() const {
46 if (!bmPtr)
47 THROW_MESSAGE("Shared pointer not set. You have to be using raw "
48 "pointer, that is unsafe.");
49 return bmPtr;
50 }
51
52private:
54 boost::shared_ptr<BasicMethod> bmPtr;
55};
56
57typedef std::deque<PairNameFEMethodPtr> FEMethodsSequence;
58typedef std::deque<BasicMethodPtr> BasicMethodsSequence;
59
60} // namespace MoFEM
61
62#endif // __AUXPETSC_HPP__
63
64/**
65 * \defgroup mofem_petsc_solvers PETSc solvers
66 * \brief PETSc solvers
67 *
68 * \ingroup mofem
69 */
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
implementation of Data Operators for Forces and Sources
Definition Common.hpp:10
std::deque< BasicMethodPtr > BasicMethodsSequence
Definition AuxPETSc.hpp:58
std::deque< PairNameFEMethodPtr > FEMethodsSequence
Definition AuxPETSc.hpp:57
BasicMethod * get() const
Definition AuxPETSc.hpp:43
BasicMethodPtr(boost::shared_ptr< BASICMETHOD > ptr)
Definition AuxPETSc.hpp:36
virtual ~BasicMethodPtr()=default
boost::shared_ptr< BasicMethod > bmPtr
Definition AuxPETSc.hpp:54
BasicMethod * operator->() const
Definition AuxPETSc.hpp:42
BasicMethod & operator*() const
Definition AuxPETSc.hpp:41
boost::shared_ptr< BasicMethod > getSharedPtr() const
Definition AuxPETSc.hpp:45
BasicMethodPtr(BasicMethod *ptr)
Definition AuxPETSc.hpp:34
BasicMethod * rawPtr
Definition AuxPETSc.hpp:53
Data structure to exchange data between MoFEM and User Loop Methods.
Structure for user loop methods on finite elements.
PairNameFEMethodPtr(std::string name, boost::shared_ptr< FEMETHOD > ptr)
Definition AuxPETSc.hpp:17
boost::shared_ptr< BasicMethod > getSharedPtr() const
Definition AuxPETSc.hpp:22
boost::shared_ptr< FEMethod > fePtr
Definition AuxPETSc.hpp:30
PairNameFEMethodPtr(std::string name, FEMethod *ptr)
Definition AuxPETSc.hpp:14
virtual ~PairNameFEMethodPtr()=default