Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
TrialFunction.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_TrialFunction_H_
9#define model_TrialFunction_H_
10
11#include <utility>
12#include <deque>
13#include <map>
14#include <list>
15#include <assert.h>
16
17#include <TerminalColors.h>
18
19#include <TrialBase.h>
20
21#include <TrialFunctionTraits.h>
22#include <Constant.h>
23
24#include <TrialProd.h>
25#include <TrialGrad.h>
26#include <TrialDef.h>
27
28namespace model
29{
30
31 template<char _name, int _nComponents, typename _FiniteElementType>
32 class TrialFunction : public TrialExpressionBase<TrialFunction<_name,_nComponents,_FiniteElementType>>,
33 public TrialBase<TrialFunction<_name,_nComponents,_FiniteElementType>>
34 {
35
36 public:
37
38 typedef double Scalar;
39 typedef _FiniteElementType FiniteElementType;
40 typedef typename FiniteElementType::ElementType ElementType;
41 typedef typename FiniteElementType::NodeType NodeType;
42
44
45 constexpr static int rows=_nComponents;
46 constexpr static int cols=1;
47
48 constexpr static int dim=ElementType::dim;
49 constexpr static int nodesPerElement=ElementType::nodesPerElement;
52
53 typedef std::map<size_t,double> DirichletConditionContainerType;
54 typedef std::map<size_t,std::array<bool,dofPerNode>> DirichletNodeMapType;
55
60
61
65 // Assignment changes values, never the identity captured by expressions.
67 {
68 return operator=(other.dofVector());
69 }
70
72 {
74 }
75
77 {
79 return *this;
80 }
81
82 TrialFunctionType& setConstant(const Eigen::Matrix<double,_nComponents,1>& c)
83 {
84 for(size_t n=0; n< nodeSize();++n)
85 {
86 TrialBase<TrialFunctionType>::dofVector().template segment<_nComponents>(n*_nComponents)=c;
87 }
88 return *this;
89 }
90
91 TrialFunctionType& operator=(const Eigen::VectorXd& temp)
92 {
93
94 assert(size_t(temp.size())==TrialBase<TrialFunctionType>::gSize() && "DOF SIZE MISMATCH");
96 return *this;
97 }
98
99 TrialFunctionType& operator+=(const Eigen::VectorXd& temp)
100 {
101
102 assert(size_t(temp.size())==TrialBase<TrialFunctionType>::gSize() && "DOF SIZE MISMATCH");
104 return *this;
105 }
106
107 TrialFunctionType& operator-=(const Eigen::VectorXd& temp)
108 {
109
110 assert(size_t(temp.size())==TrialBase<TrialFunctionType>::gSize() && "DOF SIZE MISMATCH");
112 return *this;
113 }
114
115 size_t gSize() const
116 {
118 }
119
120 size_t elementSize() const
121 {
123 }
124
125 size_t nodeSize() const
126 {
128 }
129
130 const NodeType& node(const size_t& n) const
131 {
133 }
134
135 static ShapeFunctionMatrixType sfm(const ElementType& ele, const BaryType& bary)
136 {
137 return ele.template sfm<TrialFunctionType>(bary);
138 }
139
141 {
142 return ele.template sfmGrad<TrialFunctionType>(bary);
143 }
144
146 {
147 return ele.template sfmDef<TrialFunctionType>(bary);
148 }
149
150 template<typename Condition>
151 void addDirichletCondition(const size_t& nodeListID,
152 const Condition& cond,
153 const std::array<bool,dofPerNode>& constrainDof)
154 {
155
156 TrialBase<TrialFunctionType>::addDirichletCondition(nodeListID,cond,constrainDof);
157 }
158
164
169
174
175 Eigen::VectorXd& dofVector()
176 {
178 }
179
180 const Eigen::Matrix<double,Eigen::Dynamic,1>& dofVector() const
181 {
183 }
184
185 Eigen::Matrix<double,dofPerNode,1> dofs(const NodeType& node) const
186 {
187
189 }
190
191 Eigen::Matrix<double,dofPerNode,1> dofs(const size_t& gID) const
192 {
193
195 }
196
197 Eigen::Matrix<double,dofPerElement,1> dofs(const ElementType& ele) const
198 {
199
201
202 }
203
204 };
205
206}
207#endif
size_t gSize() const
Definition TrialBase.h:86
Eigen::Matrix< double, Eigen::Dynamic, 1 > & dofVector() const
Definition TrialBase.h:91
const NodeType & node(const size_t &n) const
Definition TrialBase.h:174
DirichletConditionContainerType & dirichletConditions() const
Definition TrialBase.h:190
void addDirichletCondition(const size_t &nodeListID, const Condition &cond, const std::array< bool, dofPerNode > &constrainDof) const
Definition TrialBase.h:196
void clearDirichletConditions() const
Definition TrialBase.h:179
size_t nodeSize() const
Definition TrialBase.h:169
DirichletNodeMapType & dirichletNodeMap() const
Definition TrialBase.h:185
size_t elementSize() const
Definition TrialBase.h:164
Eigen::Matrix< double, dofPerNode, 1 > dofs(const NodeType &node) const
Definition TrialBase.h:134
FiniteElementType & fe() const
Definition TrialBase.h:77
const Eigen::Matrix< double, Eigen::Dynamic, 1 > & dofVector() const
size_t nodeSize() const
Eigen::Matrix< double, dofPerNode, 1 > dofs(const NodeType &node) const
TrialFunctionType & setConstant(const Eigen::Matrix< double, _nComponents, 1 > &c)
TrialFunction(const TrialFunctionType &)=delete
static ShapeFunctionGradMatrixType sfmGrad(const ElementType &ele, const BaryType &bary)
TypeTraits< TrialFunctionType >::BaryType BaryType
TrialFunctionType & operator-=(const Eigen::VectorXd &temp)
TrialFunctionType & operator=(const double &c)
DirichletConditionContainerType & dirichletConditions() const
TrialFunctionType & operator=(const TrialFunctionType &other)
DirichletNodeMapType & dirichletNodeMap() const
TrialFunctionType & operator+=(const Eigen::VectorXd &temp)
TrialFunction(FiniteElementType &fe)
void addDirichletCondition(const size_t &nodeListID, const Condition &cond, const std::array< bool, dofPerNode > &constrainDof)
std::map< size_t, std::array< bool, dofPerNode > > DirichletNodeMapType
TypeTraits< TrialFunctionType >::ShapeFunctionDefMatrixType ShapeFunctionDefMatrixType
TrialFunctionType & operator=(const Eigen::VectorXd &temp)
size_t elementSize() const
const NodeType & node(const size_t &n) const
TypeTraits< TrialFunctionType >::ShapeFunctionMatrixType ShapeFunctionMatrixType
Eigen::VectorXd & dofVector()
TrialFunction< _name, _nComponents, FiniteElementType > TrialFunctionType
size_t gSize() const
Eigen::Matrix< double, dofPerElement, 1 > dofs(const ElementType &ele) const
TrialFunction(TrialFunctionType &&)=delete
Eigen::Matrix< double, dofPerNode, 1 > dofs(const size_t &gID) const
static ShapeFunctionMatrixType sfm(const ElementType &ele, const BaryType &bary)
TypeTraits< TrialFunctionType >::ShapeFunctionGradMatrixType ShapeFunctionGradMatrixType
static ShapeFunctionDefMatrixType sfmDef(const ElementType &ele, const BaryType &bary)
c
Definition int_R.m:15
vertex temp