HArD::Core2D
Hybrid Arbitrary Degree::Core 2D - Library to implement 2D schemes with edge and cell polynomials as unknowns
Loading...
Searching...
No Matches
ddr-rmplate.hpp
Go to the documentation of this file.
1// Implementation of the discrete de Rham sequence for the Reissner-Mindlin plate problem.
2//
3// Author: Jerome Droniou (jerome.droniou@monash.edu)
4//
5
6
7#ifndef DDR_RMPLATE_HPP
8#define DDR_RMPLATE_HPP
9
10#include <iostream>
11
12#include <boost/math/constants/constants.hpp>
13
14#include <Eigen/Sparse>
15#include <unsupported/Eigen/SparseExtra>
16
17#include <mesh.hpp>
18#include <BoundaryConditions/BoundaryConditions.hpp> // To re-order the boundary edges and vertices
20
21#include <xgrad.hpp>
22#include <excurl.hpp>
23
29namespace HArDCore2D
30{
31
39 {
41 RMParameters( const double thickness,
42 const double young_modulus,
43 const double poisson_ratio
44 ):
45 t(thickness),
46 E(young_modulus),
47 nu(poisson_ratio)
48 {
49 // Compute derived quantities
50 beta0 = E/(12*(1.+nu));
51 beta1 = E*nu/(12*(1.-std::pow(nu,2)));
52 kappa = 5*E/(12*(1.+nu));
53 }
54
55 double t; // plate thickness
56 double E; // Young modulus
57 double nu; // Poisson ratio
58 double beta0;
59 double beta1;
60 double kappa;
61 };
62
64 struct RMNorms
65 {
67 RMNorms(double norm_rotation, double norm_displacement, double norm_kirchoff):
68 rotation(norm_rotation),
69 displacement(norm_displacement),
70 kirchoff(norm_kirchoff),
71 energy(std::sqrt( std::pow(norm_rotation, 2)+std::pow(norm_displacement, 2)+std::pow(norm_kirchoff, 2) ) )
72 {
73 // do nothing
74 };
75
76 double rotation;
77 double displacement;
78 double kirchoff;
79 double energy;
80
81 };
82
85 {
86 typedef Eigen::SparseMatrix<double> SystemMatrixType;
87
88 typedef std::function<double(const RMParameters &, const Eigen::Vector2d &)> ForcingTermType;
89 typedef std::function<Eigen::Vector2d(const RMParameters &, const Eigen::Vector2d &)> SolutionRotationType;
90 typedef std::function<Eigen::Matrix2d(const RMParameters &, const Eigen::Vector2d &)> GradientRotationType;
91 typedef std::function<double(const RMParameters &, const Eigen::Vector2d &)> SolutionDisplacementType;
92
95 const DDRCore & ddrcore,
96 const RMParameters & para,
97 const BoundaryConditions & BC_theta,
98 const BoundaryConditions & BC_u,
99 bool use_threads,
100 std::ostream & output = std::cout
101 );
102
105 const ForcingTermType & f,
106 const SolutionRotationType & theta,
107 const GradientRotationType & grad_theta,
108 const SolutionDisplacementType & u
109 );
110
111
113 inline size_t dimensionSpace() const
114 {
115 return m_excurl.dimension() + m_xgrad.dimension();
116 }
117
119 inline size_t nb_bdryDOFs() const
120 {
121 return m_BC_theta.n_dir_edges() * m_excurl.numLocalDofsEdge()
122 + m_BC_u.n_dir_edges() * m_xgrad.numLocalDofsEdge()
123 + m_BC_u.n_dir_vertices() * m_xgrad.numLocalDofsVertex();
124 }
125
127 inline size_t sizeSystem() const
128 {
129 return dimensionSpace() - nb_bdryDOFs();
130 }
131
133 inline const std::vector<std::pair<size_t,size_t>> & locUKN() const {
134 return m_locUKN;
135 }
136
138 std::vector<size_t> globalDOFIndices(const Cell &T) const
139 {
140 std::vector<size_t> I_excurl_T = m_excurl.globalDOFIndices(T);
141 std::vector<size_t> I_xgrad_T = m_xgrad.globalDOFIndices(T);
142 size_t dim_T = m_excurl.dimensionCell(T.global_index()) + m_xgrad.dimensionCell(T.global_index());
143 std::vector<size_t> I_T(dim_T);
144 size_t dim_excurl = m_excurl.dimension();
145 auto it_I_T = std::copy(I_excurl_T.begin(), I_excurl_T.end(), I_T.begin());
146 std::transform(I_xgrad_T.begin(), I_xgrad_T.end(), it_I_T, [&dim_excurl](const size_t & index) { return index + dim_excurl; });
147 return I_T;
148 }
149
151 inline const RMParameters & para() const
152 {
153 return m_para;
154 }
155
157 inline const EXCurl & exCurl() const
158 {
159 return m_excurl;
160 }
161
163 inline const XGrad & xGrad() const
164 {
165 return m_xgrad;
166 }
167
169 inline const SystemMatrixType & systemMatrix() const {
170 return m_A;
171 }
172
175 return m_A;
176 }
177
179 inline const Eigen::VectorXd & systemVector() const {
180 return m_b;
181 }
182
184 inline Eigen::VectorXd & systemVector() {
185 return m_b;
186 }
187
189 inline const SystemMatrixType & bdryMatrix() const {
190 return m_bdryMatrix;
191 }
192
194 inline const Eigen::VectorXd & bdryValues() const {
195 return m_bdryValues;
196 }
197
199 inline const double & stabilizationParameter() const {
200 return m_stab_par;
201 }
202
204 inline double & stabilizationParameter() {
205 return m_stab_par;
206 }
207
210 const Eigen::VectorXd & v
211 ) const;
212
214 template<typename outValue, typename Fct>
215 std::function<outValue(const Eigen::Vector2d &)> contractPara(const Fct &F) const
216 {
217 std::function<outValue(const Eigen::Vector2d &)> f = [this, &F](const Eigen::Vector2d &x)->outValue { return F(m_para,x);};
218 return f;
219 }
220
221
222 private:
224 std::pair<Eigen::MatrixXd, Eigen::VectorXd>
225 _compute_local_contribution(
226 size_t iT,
227 const GradientRotationType & grad_theta,
228 const ForcingTermType & f
229 );
230
232 Eigen::MatrixXd
233 _compute_local_jump_stab(size_t iE);
234
236
238 void _assemble_local_contribution(
239 size_t iT,
240 const std::pair<Eigen::MatrixXd, Eigen::VectorXd> & lsT,
241 std::list<Eigen::Triplet<double> > & A1,
242 Eigen::VectorXd & b1,
243 std::list<Eigen::Triplet<double> > & A2
244 );
245
247 void _assemble_local_jump_stab(
248 size_t iE,
249 const Eigen::MatrixXd & locJ,
250 std::list<Eigen::Triplet<double> > & A1,
251 std::list<Eigen::Triplet<double> > & A2
252 );
253
254 const DDRCore & m_ddrcore;
255 const RMParameters m_para;
256 bool m_use_threads;
257 std::ostream & m_output;
258 EXCurl m_excurl;
259 XGrad m_xgrad;
260 BoundaryConditions m_BC_theta;
261 BoundaryConditions m_BC_u;
262 SystemMatrixType m_bdryMatrix; // Matrix with columns corresponding to Dirichlet DOFs; multiplied by the boundary values, yields the modification to the system RHS for non-homogeneous BC
263 Eigen::VectorXd m_bdryValues; // Boundary values
264 SystemMatrixType m_A; // Matrix and RHS for system (after removing Dirichlet DOFs)
265 Eigen::VectorXd m_b;
266 double m_stab_par;
267 std::vector<std::pair<size_t,size_t>> m_locUKN; // Indicates the location, among the DOFs, of the unknowns after the Dirichlet DOFs are removed (the unknowns are between m_locUCK[i].first and m_locUCK[i].first+m_locUKN[i].second for all i)
268 Eigen::VectorXi m_DOFtoUKN; // Maps a dof i to its unknown in the system without BC, or to -1 if the DOF is a Dirichlet DOF
269 };
270
271 //------------------------------------------------------------------------------
272 // Exact solutions
273 //------------------------------------------------------------------------------
274
275 static const double PI = boost::math::constants::pi<double>();
276 using std::sin;
277 using std::cos;
278 using std::exp;
279 using std::pow;
280
281 //------------------------------------------------------------------------------
282 // Constant
283
285 constant_theta = [](const RMParameters & para, const VectorRd & x) -> VectorRd {
286 return VectorRd(1., 2.);
287 };
288
290 constant_grad_theta = [](const RMParameters & para, const VectorRd & x) -> Eigen::Matrix2d {
291 return Eigen::Matrix2d::Zero();
292 };
293
295 constant_u = [](const RMParameters & para, const VectorRd & x) -> double {
296 return 1.;
297 };
298
300 constant_f = [](const RMParameters & para, const VectorRd & x) -> double {
301 return 0.;
302 };
303
304 //------------------------------------------------------------------------------
305 // Polynomial
306
308 polynomial_theta = [](const RMParameters & para, const VectorRd & x) -> VectorRd {
309 return VectorRd(
310 pow(x(1),3)*pow(x(1)-1,3)*pow(x(0),2)*pow(x(0)-1,2)*(2*x(0)-1),
311 pow(x(0),3)*pow(x(0)-1,3)*pow(x(1),2)*pow(x(1)-1,2)*(2*x(1)-1)
312 );
313 };
314
316 polynomial_grad_theta = [](const RMParameters & para, const VectorRd & x) -> Eigen::Matrix2d {
317 Eigen::Matrix2d G = Eigen::Matrix2d::Zero();
318 G(0,0) = 2.*pow(x(0),2)*pow(x(1),3)*pow(x(0)-1.0,2)*pow(x(1)-1.0,3)+2.*x(0)*pow(x(1),3)*(2.*x(0)-1.)*pow(x(0)-1.,2)*pow(x(1)-1.0,3)+pow(x(0),2)*pow(x(1),3)*(2.*x(0)-1.)*(2.*x(0)-2.)*pow(x(1)-1.,3);
319 G(0,1) = 3.*pow(x(0)*x(1),2)*(2.*x(0)-1.)*pow(x(0)-1.,2)*pow(x(1)-1.,3)+3.*pow(x(0),2)*pow(x(1),3)*(2.*x(0)-1.)*pow(x(0)-1.,2)*pow(x(1)-1.,2);
320 G(1,0) = 2.*pow(x(1),2)*pow(x(0),3)*pow(x(1)-1.0,2)*pow(x(0)-1.0,3)+2.*x(1)*pow(x(0),3)*(2.*x(1)-1.)*pow(x(1)-1.,2)*pow(x(0)-1.0,3)+pow(x(1),2)*pow(x(0),3)*(2.*x(1)-1.)*(2.*x(1)-2.)*pow(x(0)-1.,3);
321 G(1,1) = 3.*pow(x(1)*x(0),2)*(2.*x(1)-1.)*pow(x(1)-1.,2)*pow(x(0)-1.,3)+3.*pow(x(1),2)*pow(x(0),3)*(2.*x(1)-1.)*pow(x(1)-1.,2)*pow(x(0)-1.,2);
322
323 return G;
324 };
325
327 polynomial_u = [](const RMParameters & para, const VectorRd & x) -> double {
328 double val = 0;
329
330 val += (1./3.)*pow(x(0),3)*pow(x(0)-1,3)*pow(x(1),3)*pow(x(1)-1,3);
331
332 val -= ( 2*pow(para.t,2) / (5*(1.-para.nu)) ) *
333 ( pow(x(1),3)*pow(x(1)-1,3)*x(0)*(x(0)-1)*(5*x(0)*x(0)-5*x(0)+1)
334 + pow(x(0),3)*pow(x(0)-1,3)*x(1)*(x(1)-1)*(5*x(1)*x(1)-5*x(1)+1) );
335
336 return val;
337 };
338
340 polynomial_f = [](const RMParameters & para, const VectorRd & x) -> double {
341 double val = 0;
342
343 val += 12*x(1)*(x(1)-1)*(5*x(0)*x(0)-5*x(0)+1) *
344 ( 2*x(1)*x(1)*(x(1)-1)*(x(1)-1) + x(0)*(x(0)-1)*(5*x(1)*x(1)-5*x(1)+1) );
345 val += 12*x(0)*(x(0)-1)*(5*x(1)*x(1)-5*x(1)+1) *
346 ( 2*x(0)*x(0)*(x(0)-1)*(x(0)-1) + x(1)*(x(1)-1)*(5*x(0)*x(0)-5*x(0)+1) );
347
348 return val * para.E / (12* (1.-para.nu*para.nu) );
349 };
350
351 //------------------------------------------------------------------------------
352 // Analytical solution (see paper)
353 // (BC are not zero here)
354
355 static std::function<double(const VectorRd &)>
356 an_g = [](const VectorRd &x)->double { return sin(PI*x(0))*sin(PI*x(1)); };
357
358 static std::function<VectorRd(const VectorRd &)>
359 an_GRAD_g = [](const VectorRd & x) -> VectorRd {
360 return VectorRd( PI*cos(PI*x(0))*sin(PI*x(1)), PI*sin(PI*x(0))*cos(PI*x(1)) );
361 };
362
363 static std::function<MatrixRd(const VectorRd &)>
364 an_HESS_g = [](const VectorRd & x) -> MatrixRd {
365 MatrixRd H = MatrixRd::Zero();
366 H.row(0) << -PI*PI*sin(PI*x(0))*sin(PI*x(1)), PI*PI*cos(PI*x(0))*cos(PI*x(1));
367 H.row(1) << PI*PI*cos(PI*x(0))*cos(PI*x(1)), -PI*PI*sin(PI*x(0))*sin(PI*x(1));
368 return H;
369 };
370
371 static std::function<double(const VectorRd &)>
372 an_LAPL_g = [](const VectorRd &x)->double { return -2*pow(PI,2)*sin(PI*x(0))*sin(PI*x(1)); };
373
374 static std::function<double(const VectorRd &)>
375 an_V = [](const VectorRd &x)->double { return x(0) * exp(-x(0))*cos(x(1)); };
376
377 static std::function<VectorRd(const VectorRd &)>
378 an_GRAD_V = [](const VectorRd & x) -> VectorRd {
379 return VectorRd((1.-x(0))*exp(-x(0))*cos(x(1)), -x(0)*exp(-x(0))*sin(x(1)));
380 };
381
382 static std::function<MatrixRd(const VectorRd &)>
383 an_HESS_V = [](const VectorRd & x) -> MatrixRd {
384 MatrixRd H = MatrixRd::Zero();
385 H.row(0) << (x(0)-2.)*exp(-x(0))*cos(x(1)), -(1.-x(0))*exp(-x(0))*sin(x(1));
386 H.row(1) << -(1.-x(0))*exp(-x(0))*sin(x(1)), -x(0)*exp(-x(0))*cos(x(1));
387 return H;
388 };
389
390 static std::function<double(const VectorRd &)>
391 an_LAPL_V = [](const VectorRd &x)->double { return -2.* exp(-x(0))*cos(x(1)); };
392
393
395 an_v = [](const RMParameters & para, const VectorRd & x) -> double {
396 return pow(para.t,3) * an_V(x/para.t) + an_g(x);
397 };
398
400 an_GRAD_v = [](const RMParameters & para, const VectorRd & x) -> VectorRd {
401 return pow(para.t, 2) * an_GRAD_V(x/para.t) + an_GRAD_g(x);
402 };
403
405 an_HESS_v = [](const RMParameters & para, const VectorRd & x) -> MatrixRd {
406 return para.t * an_HESS_V(x/para.t) + an_HESS_g(x);
407 };
408
410 an_LAPL_v = [](const RMParameters & para, const VectorRd & x) -> double {
411 return para.t * (an_LAPL_V)(x/para.t) + an_LAPL_g(x);
412 };
413
415
417
419 analytical_u = [](const RMParameters & para, const VectorRd & x) -> double {
420 return an_v(para, x) - pow(para.t,2) * ( (para.beta0+para.beta1)/para.kappa ) * an_LAPL_v(para, x);
421 };
422
424 analytical_f = [](const RMParameters & para, const VectorRd & x) -> double {
425 return (para.beta0+para.beta1) * 4 * pow(PI,4)*sin(PI*x(0))*sin(PI*x(1));
426 };
427
428 //------------------------------------------------------------------------------
429 // Unkown exact solution, just useful to fix BC and load and plot the approximation solution
430
432 ukn_theta = [](const RMParameters & para, const VectorRd & x) -> VectorRd {
433 return VectorRd(0., 0.);
434 };
435
437 ukn_grad_theta = [](const RMParameters & para, const VectorRd & x) -> Eigen::Matrix2d {
438 return Eigen::Matrix2d::Zero();
439 };
440
442 ukn_u = [](const RMParameters & para, const VectorRd & x) -> double {
443 return x(0);
444 };
445
447 ukn_f = [](const RMParameters & para, const VectorRd & x) -> double {
448 double val = 1.;
449 if (x(0)<.5){
450 val = -1.;
451 }
452 return val;
453 };
454
455 //------------------------------------------------------------------------------
456 // Kirchoff limit: solution of E/(12(1-nu^2)) Delta^2 u = g
457 // Useful to evaluate convergence as t->0
458
460 kir_theta = [](const RMParameters & para, const VectorRd & x) -> VectorRd {
461 double coef = 12.*(1-pow(para.nu,2))/ (para.E * 4.*pow(PI, 4));
462 return coef * PI * VectorRd(cos(PI*x(0))*sin(PI*x(1)), sin(PI*x(0))*cos(PI*x(1)));
463 };
464
466 kir_grad_theta = [](const RMParameters & para, const VectorRd & x) -> Eigen::Matrix2d {
467 double coef = 12.*(1-pow(para.nu,2))/ (para.E * 4.*pow(PI, 4));
468 Eigen::Matrix2d H = Eigen::Matrix2d::Zero();
469 H.row(0) << -PI*PI*sin(PI*x(0))*sin(PI*x(1)), PI*PI*cos(PI*x(0))*cos(PI*x(1));
470 H.row(1) << PI*PI*cos(PI*x(0))*cos(PI*x(1)), -PI*PI*sin(PI*x(0))*sin(PI*x(1));
471 return coef * H;
472 };
473
475 kir_u = [](const RMParameters & para, const VectorRd & x) -> double {
476 double coef = 12.*(1-pow(para.nu,2))/ (para.E * 4.*pow(PI, 4));
477 return coef * sin(PI*x(0))*sin(PI*x(1));
478 };
479
481 kir_f = [](const RMParameters & para, const VectorRd & x) -> double {
482 return sin(PI*x(0))*sin(PI*x(1));
483 };
484
485
486} // end of namespace HArDCore2D
487
488#endif
The BoundaryConditions class provides definition of boundary conditions.
Definition BoundaryConditions.hpp:45
const size_t n_dir_vertices() const
Returns the number of Dirichlet vertices.
Definition BoundaryConditions.hpp:75
const size_t n_dir_edges() const
Returns the number of Dirichlet edges.
Definition BoundaryConditions.hpp:70
Construct all polynomial spaces for the DDR sequence.
Definition ddrcore.hpp:63
Extended XCurl space, with vector-valued polynomials on the edges.
Definition excurl.hpp:19
Discrete H1 space: local operators, L2 product and global interpolator.
Definition xgrad.hpp:17
Eigen::Vector2d VectorRd
Definition basis.hpp:55
Eigen::Matrix2d MatrixRd
Definition basis.hpp:54
std::vector< size_t > globalDOFIndices(const Cell &T) const
Definition globaldofspace.cpp:98
size_t numLocalDofsVertex() const
Returns the number of local vertex DOFs.
Definition localdofspace.hpp:39
size_t dimensionCell(const Cell &T) const
Returns the dimension of the local space on the cell T (including faces, edges and vertices)
Definition localdofspace.hpp:112
size_t dimension() const
Returns the dimension of the global space (all DOFs for all geometric entities)
Definition localdofspace.hpp:61
size_t numLocalDofsEdge() const
Returns the number of local edge DOFs.
Definition localdofspace.hpp:45
static const double PI
Definition ddr-klplate.hpp:187
const double & stabilizationParameter() const
Returns the stabilization parameter.
Definition ddr-rmplate.hpp:199
std::function< Eigen::Vector2d(const RMParameters &, const Eigen::Vector2d &)> SolutionRotationType
Definition ddr-rmplate.hpp:89
double E
Definition ddr-rmplate.hpp:56
std::vector< size_t > globalDOFIndices(const Cell &T) const
Create the vector of DOF indices for cell T, which combines the DOFs for the spaces EXcurl and Xgrad.
Definition ddr-rmplate.hpp:138
static ReissnerMindlin::SolutionDisplacementType polynomial_u
Definition ddr-rmplate.hpp:327
static std::function< double(const VectorRd &)> an_V
Definition ddr-rmplate.hpp:375
std::function< Eigen::Matrix2d(const RMParameters &, const Eigen::Vector2d &)> GradientRotationType
Definition ddr-rmplate.hpp:90
static ReissnerMindlin::SolutionRotationType ukn_theta
Definition ddr-rmplate.hpp:432
static ReissnerMindlin::SolutionDisplacementType an_LAPL_v
Definition ddr-rmplate.hpp:410
static ReissnerMindlin::GradientRotationType ukn_grad_theta
Definition ddr-rmplate.hpp:437
static std::function< double(const VectorRd &)> an_LAPL_g
Definition ddr-rmplate.hpp:372
std::function< outValue(const Eigen::Vector2d &)> contractPara(const Fct &F) const
Takes a function dependent on RMParameter and a position x, and returns a function depending only on ...
Definition ddr-rmplate.hpp:215
static std::function< VectorRd(const VectorRd &)> an_GRAD_g
Definition ddr-rmplate.hpp:359
static ReissnerMindlin::GradientRotationType an_HESS_v
Definition ddr-rmplate.hpp:405
std::function< double(const RMParameters &, const Eigen::Vector2d &)> ForcingTermType
Definition ddr-rmplate.hpp:88
static ReissnerMindlin::SolutionRotationType polynomial_theta
Definition ddr-rmplate.hpp:308
static ReissnerMindlin::SolutionRotationType constant_theta
Definition ddr-rmplate.hpp:285
static ReissnerMindlin::ForcingTermType polynomial_f
Definition ddr-rmplate.hpp:340
static ReissnerMindlin::ForcingTermType kir_f
Definition ddr-rmplate.hpp:481
double nu
Definition ddr-rmplate.hpp:57
const EXCurl & exCurl() const
Returns the space EXCurl.
Definition ddr-rmplate.hpp:157
RMNorms computeNorms(const Eigen::VectorXd &v) const
Compute the discrete norms: rotation, displacement, Kirchoff term, and complete energy.
Definition ddr-rmplate.cpp:725
static ReissnerMindlin::ForcingTermType constant_f
Definition ddr-rmplate.hpp:300
const RMParameters & para() const
Returns the parameters.
Definition ddr-rmplate.hpp:151
Eigen::VectorXd & systemVector()
Returns the linear system right-hand side vector.
Definition ddr-rmplate.hpp:184
static ReissnerMindlin::SolutionDisplacementType kir_u
Definition ddr-rmplate.hpp:475
double displacement
Norm of displacement.
Definition ddr-rmplate.hpp:77
const SystemMatrixType & bdryMatrix() const
Returns the Matrix for BC.
Definition ddr-rmplate.hpp:189
std::function< double(const RMParameters &, const Eigen::Vector2d &)> SolutionDisplacementType
Definition ddr-rmplate.hpp:91
static std::function< double(const VectorRd &)> an_LAPL_V
Definition ddr-rmplate.hpp:391
const std::vector< std::pair< size_t, size_t > > & locUKN() const
Returns the location of the unknowns among the DOFs.
Definition ddr-rmplate.hpp:133
const Eigen::VectorXd & bdryValues() const
Returns the boundary values.
Definition ddr-rmplate.hpp:194
static std::function< MatrixRd(const VectorRd &)> an_HESS_g
Definition ddr-rmplate.hpp:364
static ReissnerMindlin::SolutionDisplacementType analytical_u
Definition ddr-rmplate.hpp:419
static ReissnerMindlin::GradientRotationType kir_grad_theta
Definition ddr-rmplate.hpp:466
size_t nb_bdryDOFs() const
Returns the nb of DOFs for BC.
Definition ddr-rmplate.hpp:119
double beta1
Definition ddr-rmplate.hpp:59
static ReissnerMindlin::GradientRotationType constant_grad_theta
Definition ddr-rmplate.hpp:290
const Eigen::VectorXd & systemVector() const
Returns the linear system right-hand side vector.
Definition ddr-rmplate.hpp:179
static std::function< MatrixRd(const VectorRd &)> an_HESS_V
Definition ddr-rmplate.hpp:383
static ReissnerMindlin::ForcingTermType analytical_f
Definition ddr-rmplate.hpp:424
Eigen::SparseMatrix< double > SystemMatrixType
Definition ddr-rmplate.hpp:86
const SystemMatrixType & systemMatrix() const
Returns the linear system matrix.
Definition ddr-rmplate.hpp:169
static ReissnerMindlin::GradientRotationType analytical_grad_theta
Definition ddr-rmplate.hpp:416
static ReissnerMindlin::SolutionDisplacementType ukn_u
Definition ddr-rmplate.hpp:442
static ReissnerMindlin::SolutionRotationType kir_theta
Definition ddr-rmplate.hpp:460
double kappa
Definition ddr-rmplate.hpp:60
void assembleLinearSystem(const ForcingTermType &f, const SolutionRotationType &theta, const GradientRotationType &grad_theta, const SolutionDisplacementType &u)
Assemble the global system
Definition ddr-rmplate.cpp:373
double t
Definition ddr-rmplate.hpp:55
static ReissnerMindlin::ForcingTermType ukn_f
Definition ddr-rmplate.hpp:447
static std::function< double(const VectorRd &)> an_g
Definition ddr-rmplate.hpp:356
RMNorms(double norm_rotation, double norm_displacement, double norm_kirchoff)
Constructor.
Definition ddr-rmplate.hpp:67
SystemMatrixType & systemMatrix()
Returns the linear system matrix.
Definition ddr-rmplate.hpp:174
static ReissnerMindlin::SolutionDisplacementType constant_u
Definition ddr-rmplate.hpp:295
const XGrad & xGrad() const
Returns the space XGrad.
Definition ddr-rmplate.hpp:163
size_t sizeSystem() const
Returns the size of the system without BC.
Definition ddr-rmplate.hpp:127
size_t dimensionSpace() const
Returns the dimension of the rotation + displacement space (with BC)
Definition ddr-rmplate.hpp:113
static ReissnerMindlin::SolutionRotationType analytical_theta
Definition ddr-rmplate.hpp:414
static ReissnerMindlin::SolutionRotationType an_GRAD_v
Definition ddr-rmplate.hpp:400
double beta0
Definition ddr-rmplate.hpp:58
double kirchoff
Norm of kirchoff term.
Definition ddr-rmplate.hpp:78
static ReissnerMindlin::GradientRotationType polynomial_grad_theta
Definition ddr-rmplate.hpp:316
static std::function< VectorRd(const VectorRd &)> an_GRAD_V
Definition ddr-rmplate.hpp:378
double rotation
Norm of rotation.
Definition ddr-rmplate.hpp:76
RMParameters(const double thickness, const double young_modulus, const double poisson_ratio)
Constructor.
Definition ddr-rmplate.hpp:41
double & stabilizationParameter()
Returns the stabilization parameter.
Definition ddr-rmplate.hpp:204
double energy
Total energy.
Definition ddr-rmplate.hpp:79
static ReissnerMindlin::SolutionDisplacementType an_v
Definition ddr-rmplate.hpp:395
bool use_threads
Definition HHO_DiffAdvecReac.hpp:47
if(strcmp(field, 'real')) % real valued entries T
Definition mmread.m:93
Definition ddr-klplate.hpp:27
static auto v
Definition ddrcore-test.hpp:32
Structure to store component norms (for rotation, displacement, Kirchoff term and total energy)
Definition ddr-rmplate.hpp:65
Structure to store model data.
Definition ddr-rmplate.hpp:39
Assemble a RM problem.
Definition ddr-rmplate.hpp:85