Go to the documentation of this file.
24 #ifndef ELASTOSTATICS_KERNEL_HPP_INCLUDED
25 #define ELASTOSTATICS_KERNEL_HPP_INCLUDED
27 #include <boost/math/constants/constants.hpp>
29 #include "../core/global_definitions.hpp"
30 #include "../core/kernel.hpp"
31 #include "../core/gaussian_quadrature.hpp"
70 return 2. * m_mu * m_nu / (1. - 2. * m_nu);
87 class elastostatics_2d_U_kernel;
95 typedef Eigen::Matrix<double, 2, 2>
result_t;
136 using boost::math::double_constants::pi;
140 double r = rvec.norm();
141 x_t gradr = rvec.normalized();
142 return ( - (3.-4.*nu) * result_t::Identity() * std::log(r) + gradr * gradr.transpose() ) / (8.*pi*mu*(1.-nu));
160 class elastostatics_2d_T_kernel;
168 typedef Eigen::Matrix<double, 2, 2>
result_t;
213 using boost::math::double_constants::pi;
217 double r = rvec.norm();
218 x_t gradr = rvec.normalized();
219 double rdny = gradr.dot(ny);
222 (rdny * ( (1.-2.*nu)*result_t::Identity() + 2.*(gradr*gradr.transpose()) )
224 (1.-2.*nu) * (gradr*ny.transpose()-ny*gradr.transpose()) )
243 class elastostatics_3d_U_kernel;
251 typedef Eigen::Matrix<double, 3, 3>
result_t;
285 using boost::math::double_constants::pi;
290 double r = rvec.norm();
291 x_t gradr = rvec.normalized();
292 return ((3. - 4. * nu) * result_t::Identity() + (gradr * gradr.transpose())) / (16. * pi * (1. - nu) * r * mu);
312 typedef Eigen::Matrix<double, 3, 3>
result_t;
346 using boost::math::double_constants::pi;
350 auto r = rvec.norm();
351 auto gradr = rvec.normalized();
352 auto rdny = gradr.dot(ny);
353 return (-rdny * ((1. - 2. * nu) * result_t::Identity() + 3. * (gradr * gradr.transpose()))
354 + (1. - 2. * nu) * (gradr * ny.transpose() - ny * gradr.transpose())
355 ) / (8. * pi * (1. - nu) * r * r);
371 template <
class guiggiani>
374 using namespace boost::math::double_constants;
376 auto const &r1 = obj.get_rvec_series(
_1());
377 auto const &j0 = obj.get_Jvec_series(
_0());
378 auto const &N0 = obj.get_shape_series(
_0());
379 auto nu = obj.get_kernel().get_poisson_ratio();
380 Eigen::Matrix<double, 3, 3> res = ((r1*j0.transpose())-(j0*r1.transpose()))
381 * (1.-2.*nu)/(1.-nu)/(8.*pi);
388 #endif // ELASTOSTATICS_KERNEL_HPP_INCLUDED
definition of Laurent coefficients of singularities
@ is_symmetric
indicates if the kernel is symmetric
kernel_traits_ns::result< Derived >::type result_t
the kernel result type
kernel_traits_ns::test_input< Derived >::type test_input_t
kernel test input type
const x_t & get_unit_normal(void) const
return the unit normal vector
double get_shear_modulus() const
Get the shear modulus.
@ is_singular
indicates if the kernel is singular
2d traction kernel for elastostatics
CRTP base class of all BEM kernels.
semi_block_product_result_type< mat, rightDerived >::type semi_block_product(mat const &m, Eigen::MatrixBase< rightDerived > const &r)
compute semi block product of a matrix and a vector m * v^T
space_t::location_t x_t
the location type
a class representing a normal + Jacobian input
Base class for elastostatics kernels. This class contains the two material parameters.
@ singular_quadrature_order
the quadrature order singular integrals are handled with
std::integral_constant< int, -1 > _m1
shorthand for constant minus one
kernel_traits_ns::singular_core< Derived >::type singular_core_t
the kernel's singular core type
implementation of location and normal kernel inputs
tag for the family of Gaussian quadratures
traits_t::result_t result_t
compile time check if the two kernel inputs are compatible
a class representing a simple location
const x_t & get_x(void) const
return the location
elastostatics_2d_T_kernel(double nu, double mu)
Construct a new elastostatics 2d T kernel object.
std::integral_constant< int, 1 > _1
shorthand for constant one
std::integral_constant< int, 0 > _0
shorthand for constant zero
double get_lame_lambda() const
Get the lame's lambda parameter.
double get_poisson_ratio() const
Get the poisson ratio.
result_t operator()(x_t const &x, x_t const &y) const
Evaluate the kernel between two kernel inputs.
kernel_traits_ns::quadrature_family< Derived >::type quadrature_family_t
the far field asymptotic behaviour of the kernel
result_t operator()(location_input_2d const &x, location_input_2d const &y) const
Evaluate the kernel between two locations.
elastostatics_2d_U_kernel(double nu, double mu)
Construct a new elastostatics 2d U kernel object.
kernel_traits_ns::singularity_type< Derived >::type singularity_type_t
the kernel's singularity type
result_t operator()(x_t const &x, x_t const &y, x_t const &ny) const
Evaluate the kernel between two locations.
Guiggiani's method for CPV and HPF collocational integrals.
double get_bulk_modulus() const
get the bulk modulus
elastostatics_kernel(double nu, double mu)
Construct a new elastostatics kernel object.
The displacement kernel of 2D elastostatics.
Implementation of Guiggiani's method.
the traction kernel for 3d isotropic elastostatics
the displacement kernel for 3d isotropic elastostatics
result_t operator()(location_input_2d const &x, location_normal_input_2d const &y) const
Evaluate the kernel between two inputs.
kernel_traits_ns::far_field_behaviour< Derived >::type far_field_behaviour_t
the far field asymptotic behaviour of the kernel
kernel_traits_ns::trial_input< Derived >::type trial_input_t
kernel trial input type
singular traits class of a kernel