v0.14.0
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
44 inline boost::shared_ptr<BasicMethod> getSharedPtr() const {
45 if (!bmPtr)
46 THROW_MESSAGE("Shared pointer not set. You have to be using raw "
47 "pointer, that is unsafe.");
48 return bmPtr;
49 }
50
51private:
53 boost::shared_ptr<BasicMethod> bmPtr;
54};
55
56typedef std::deque<PairNameFEMethodPtr> FEMethodsSequence;
57typedef std::deque<BasicMethodPtr> BasicMethodsSequence;
58
59} // namespace MoFEM
60
61#endif // __AUXPETSC_HPP__
62
63/**
64 * \defgroup mofem_petsc_solvers PETSc solvers
65 * \brief PETSc solvers
66 *
67 * \ingroup mofem
68 */
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
Definition: definitions.h:561
implementation of Data Operators for Forces and Sources
Definition: Common.hpp:10
std::deque< BasicMethodPtr > BasicMethodsSequence
Definition: AuxPETSc.hpp:57
std::deque< PairNameFEMethodPtr > FEMethodsSequence
Definition: AuxPETSc.hpp:56
Definition: enable_if.hpp:6
Data structure to exchange data between mofem and User Loop Methods.
BasicMethodPtr(boost::shared_ptr< BASICMETHOD > ptr)
Definition: AuxPETSc.hpp:36
virtual ~BasicMethodPtr()=default
boost::shared_ptr< BasicMethod > bmPtr
Definition: AuxPETSc.hpp:53
BasicMethod * operator->() const
Definition: AuxPETSc.hpp:42
BasicMethod & operator*() const
Definition: AuxPETSc.hpp:41
boost::shared_ptr< BasicMethod > getSharedPtr() const
Definition: AuxPETSc.hpp:44
BasicMethodPtr(BasicMethod *ptr)
Definition: AuxPETSc.hpp:34
BasicMethod * rawPtr
Definition: AuxPETSc.hpp:52
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