Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
TrialGrad.h
Go to the documentation of this file.
1/* This file is part of MoDELib, the Mechanics Of Defects Evolution Library.
2 *
3 *
4 * MoDELib is distributed without any warranty under the
5 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
6 */
7
8#ifndef model_TrialGrad_H_
9#define model_TrialGrad_H_
10
11#include <utility>
12#include <type_traits>
13
14#include <TypeTraits.h>
15#include <Simplex.h>
16#include <TrialBase.h>
17#include <TrialExpressionBase.h>
18#include <memory>
19#include <stdexcept>
20
21namespace model
22{
23
24 template <typename T>
25 class TrialGrad :
26 public TrialExpressionBase<TrialGrad<T> >
27 {
28
29 public:
30
31 typedef typename T::TrialFunctionType TrialFunctionType;
32
37 constexpr static int rows=TrialFunctionType::dim*T::rows;
38 constexpr static int cols=T::cols;
39 typedef Eigen::Matrix<double,rows,dofPerElement> ShapeFunctionMatrixType;
40 typedef Eigen::Matrix<double,rows,1> EvalMatrixType;
41
42 const std::shared_ptr<T> op;
43
44 explicit TrialGrad(std::shared_ptr<T> exp) : op(std::move(exp))
45 {
46 if(!op)
47 {
48 throw std::invalid_argument("Null FEM expression operand.");
49 }
50 }
51
53 const BaryType& bary) const
54 {
55 return op->sfmGrad(ele,bary);
56 }
57
58 const auto& field() const
59 {
60 return op->field();
61 }
62
63 };
64
65 template<class T, std::enable_if_t<std::is_base_of_v<TrialExpressionBase<T>,T>,int> = 0>
66 auto grad(const std::shared_ptr<T>& x)
67 {
68 return std::make_shared<TrialGrad<T>>(x);
69 }
70}
71#endif
TrialGrad(std::shared_ptr< T > exp)
Definition TrialGrad.h:44
const auto & field() const
Definition TrialGrad.h:58
static constexpr int dofPerElement
Definition TrialGrad.h:36
TypeTraits< TrialFunctionType >::ElementType ElementType
Definition TrialGrad.h:33
Eigen::Matrix< double, rows, 1 > EvalMatrixType
Definition TrialGrad.h:40
MobileTrialType::TrialFunctionType TrialFunctionType
Definition TrialGrad.h:31
ShapeFunctionMatrixType sfm(const ElementType &ele, const BaryType &bary) const
Definition TrialGrad.h:52
TypeTraits< TrialFunctionType >::BaryType BaryType
Definition TrialGrad.h:34
const std::shared_ptr< MobileTrialType > op
Definition TrialGrad.h:42
Eigen::Matrix< double, rows, dofPerElement > ShapeFunctionMatrixType
Definition TrialGrad.h:39
x
Definition int_R.m:12
auto grad(const std::shared_ptr< T > &x)
Definition TrialGrad.h:66