HArD::Core2D
Hybrid Arbitrary Degree::Core 2D - Library to implement 2D schemes with edge and cell polynomials as unknowns
Loading...
Searching...
No Matches
vsxcurl-test.hpp
Go to the documentation of this file.
1#ifndef VSXCURL_TEST_HPP
2#define VSXCURL_TEST_HPP
3
4#include <boost/math/constants/constants.hpp>
5#include <vsxcurl.hpp>
6
7namespace HArDCore2D
8{
9static const double PI = boost::math::constants::pi<double>();
10using std::sin;
11
12//------------------------------------------------------------------------------
13
14static std::function<Eigen::Matrix2d(const Eigen::Vector2d&)> constant_tensor =
15[](const Eigen::Vector2d& x) -> Eigen::Matrix2d {
16 return Eigen::Matrix2d::Constant(1.);
17};
18
19static std::function<Eigen::Vector2d(const Eigen::Vector2d&)> rot_constant_tensor =
20[](const Eigen::Vector2d& x) -> Eigen::Vector2d {
21 return Eigen::Vector2d::Zero();
22};
23
24//------------------------------------------------------------------------------
25
26static std::function<Eigen::Matrix2d(const Eigen::Vector2d&)> linear_tensor =
27[](const Eigen::Vector2d& x) -> Eigen::Matrix2d {
28 Eigen::Matrix2d F;
29 F << 1. + x(0), x(1),
30 2. * x(1), 3. - x(0);
31 return F;
32};
33
34static std::function<Eigen::Vector2d(const Eigen::Vector2d&)> rot_linear_tensor =
35[](const Eigen::Vector2d& x) -> Eigen::Vector2d {
36 return Eigen::Vector2d(0., -3.);
37};
38
39//------------------------------------------------------------------------------
40
41static std::function<Eigen::Matrix2d(const Eigen::Vector2d&)> trigonometric_tensor =
42[](const Eigen::Vector2d& x) -> Eigen::Matrix2d {
43 Eigen::Matrix2d F;
44 double s = sin(PI * x(0)) * sin(PI * x(1));
45 double c = cos(PI * x(0)) * cos(PI * x(1));
46 F << s, c,
47 -c, s;
48 return F;
49};
50
51static std::function<Eigen::Vector2d(const Eigen::Vector2d&)> rot_trigonometric_tensor =
52[](const Eigen::Vector2d& x) -> Eigen::Vector2d {
53 double px = PI * x(0);
54 double py = PI * x(1);
55 double comp1 = -2.0 * PI * sin(px) * cos(py);
56 double comp2 = 0.0;
57 return Eigen::Vector2d(comp1, comp2);
58};
59//------------------------------------------------------------------------------
60
61template<typename T>
62double squared_l2_error(
63 const std::function<T(const Eigen::Vector2d &)> & f,
64 const Eigen::VectorXd & fX,
65 const boost::multi_array<T, 2> & fX_basis_quad,
66 const QuadratureRule & quad_X
67)
68{
69 assert(fX_basis_quad.shape()[0] == (size_t)fX.size() &&
70 fX_basis_quad.shape()[1] == quad_X.size());
71
72 double err = 0.;
73 for (size_t iqn = 0; iqn < quad_X.size(); iqn++) {
74 T f_iqn = f(quad_X[iqn].vector());
75
76 T fX_iqn = fX(0) * fX_basis_quad[0][iqn];
77 for (size_t i = 1; i < fX_basis_quad.shape()[0]; i++) {
78 fX_iqn += fX(i) * fX_basis_quad[i][iqn];
79 }
80
81 T diff_iqn = f_iqn - fX_iqn;
82 err += quad_X[iqn].w * diff_iqn.squaredNorm();
83 }
84 return err;
85}
86}
87
88#endif
Compute max and min eigenvalues of all matrices for i
Definition compute_eigs.m:5
static const double PI
Definition ddr-klplate.hpp:187
std::vector< QuadratureNode > QuadratureRule
Definition quadraturerule.hpp:55
if(strcmp(field, 'real')) % real valued entries T
Definition mmread.m:93
Definition ddr-klplate.hpp:27
static std::function< Eigen::Vector2d(const Eigen::Vector2d &)> rot_trigonometric_tensor
Definition vsxcurl-test.hpp:51
static std::function< Eigen::Matrix2d(const Eigen::Vector2d &)> linear_tensor
Definition vsxcurl-test.hpp:26
static std::function< Eigen::Vector2d(const Eigen::Vector2d &)> rot_linear_tensor
Definition vsxcurl-test.hpp:34
static std::function< Eigen::Matrix2d(const Eigen::Vector2d &)> constant_tensor
Definition vsxcurl-test.hpp:14
static std::function< Eigen::Vector2d(const Eigen::Vector2d &)> rot_constant_tensor
Definition vsxcurl-test.hpp:19
static std::function< Eigen::Matrix2d(const Eigen::Vector2d &)> trigonometric_tensor
Definition vsxcurl-test.hpp:41
double squared_l2_error(const std::function< T(const Eigen::Vector2d &)> &f, const Eigen::VectorXd &fX, const boost::multi_array< T, 2 > &fX_basis_quad, const QuadratureRule &quad_X)
Definition excurl-test.hpp:140