9#include <kernel/assembly/bilinear_operator.hpp>
39 static constexpr TrafoTags trafo_config = TrafoTags::none;
51 template<
typename AsmTraits_>
57 typedef typename AsmTraits_::DataType
DataType;
95 return dot(phi.grad, psi.grad);
111 template<
int dimension_>
121 static constexpr TrafoTags trafo_config = TrafoTags::none;
133 template<
typename AsmTraits_>
229 template<
typename AsmTraits_>
301 static constexpr TrafoTags trafo_config = TrafoTags::none;
313 template<
typename AsmTraits_>
357 return phi.hess.trace() * psi.hess.trace();
377 static constexpr TrafoTags trafo_config = TrafoTags::none;
389 template<
typename AsmTraits_>
433 return phi.value * psi.value;
447 template<
int dimension_>
457 static constexpr TrafoTags trafo_config = TrafoTags::none;
469 template<
typename AsmTraits_>
538 static constexpr TrafoTags trafo_config = TrafoTags::none;
550 template<
typename AsmTraits_>
601 return phi.value * psi.grad[
deriv];
638 static constexpr TrafoTags trafo_config = TrafoTags::none;
650 template<
typename AsmTraits_>
701 return phi.value * psi.grad[
deriv];
734 static constexpr TrafoTags trafo_config = TrafoTags::none;
738 template<
typename AsmTraits_>
789 return phi.grad[
ic] * psi.grad[
ir];
842 static constexpr TrafoTags trafo_config = TrafoTags::none;
854 template<
typename AsmTraits_>
905 return ((
ir==
ic) ? dot(phi.grad,psi.grad) :
DataType(0)) + phi.grad[
ir] * psi.grad[
ic];
948 template<
int dimension_>
958 static constexpr TrafoTags trafo_config = TrafoTags::none;
970 template<
typename AsmTraits_>
1055 template<
int dimension_>
1060 static constexpr int BlockHeight = dimension_;
1061 static constexpr int BlockWidth = dimension_;
1067 template<
typename AsmTraits_>
1093 _normal = tau.normal;
1099 r.add_scalar_main_diag(
Tiny::dot(_normal, phi.grad) * psi.value);
1124 template<
int dimension_>
1129 static constexpr int BlockHeight = dimension_;
1130 static constexpr int BlockWidth = dimension_;
1136 template<
typename AsmTraits_>
1162 _normal = tau.normal;
1168 r.add_outer_product(phi.grad, _normal, psi.value);
1183 template<
int dimension_>
1188 static constexpr int BlockHeight = dimension_;
1189 static constexpr int BlockWidth = 1;
1191 static constexpr TrafoTags trafo_config = TrafoTags::none;
1195 template<
typename AsmTraits_>
1219 for(
int i(0); i < dimension_; ++i)
1220 r(i,0) = phi.grad[i] * psi.value;
1234 template<
int dimension_>
1239 static constexpr int BlockHeight = dimension_;
1240 static constexpr int BlockWidth = 1;
1242 static constexpr TrafoTags trafo_config = TrafoTags::none;
1246 template<
typename AsmTraits_>
1270 for(
int i(0); i < dimension_; ++i)
1271 r(i,0) = phi.value * psi.grad[i];
1298 template<
int dim_,
int nsc_>
1303 static constexpr int BlockHeight = dim_;
1304 static constexpr int BlockWidth = nsc_;
1306 static constexpr TrafoTags trafo_config = TrafoTags::none;
1310 template<
typename AsmTraits_>
1316 typedef typename AsmTraits_::TestBasisData TestBasisData;
1317 typedef typename AsmTraits_::TrialBasisData TrialBasisData;
1323 template<
typename T_>
1328 R(0,0) = u * der(0);
1329 R(0,1) = u * der(1);
1337 R(1,2) = u * der(0);
1338 R(1,3) = u * der(1);
1342 template<
typename T_>
1351 R(0,0) = u * der(0);
1353 R(0,2) = u * der(1);
1358 R(1,1) = u * der(1);
1359 R(1,2) = u * der(0);
1363 template<
typename T_>
1367 R(0,0) = u * der(0);
1368 R(0,1) = u * der(1);
1369 R(0,2) = u * der(2);
1381 R(1,3) = u * der(0);
1382 R(1,4) = u * der(1);
1383 R(1,5) = u * der(2);
1395 R(2,6) = u * der(0);
1396 R(2,7) = u * der(1);
1397 R(2,8) = u * der(2);
1401 template<
typename T_>
1410 R(0,0) = u * der(0);
1413 R(0,3) = u * der(1);
1415 R(0,5) = u * der(2);
1419 R(1,1) = u * der(1);
1421 R(1,3) = u * der(0);
1422 R(1,4) = u * der(2);
1428 R(2,2) = u * der(2);
1430 R(2,4) = u * der(1);
1431 R(2,5) = u * der(0);
1434 ValueType
eval(
const TrialBasisData& phi,
const TestBasisData& psi)
1437 eval(R, phi.grad, psi.value);
1464 template<
int dim_,
int nsc_>
1469 static constexpr int BlockHeight = nsc_;
1470 static constexpr int BlockWidth = dim_;
1472 static constexpr TrafoTags trafo_config = TrafoTags::none;
1476 template<
typename AsmTraits_>
1482 typedef typename AsmTraits_::TestBasisData TestBasisData;
1483 typedef typename AsmTraits_::TrialBasisData TrialBasisData;
1489 template<
typename T_>
1493 K(0,0) = s * der(0);
1497 K(1,0) = s * der(1) / T_(2);
1498 K(1,1) = s * der(0) / T_(2);
1501 K(2,0) = s * der(1) / T_(2);
1502 K(2,1) = s * der(0) / T_(2);
1506 K(3,1) = s * der(1);
1510 template<
typename T_>
1518 K(0,0) = s * der(0);
1523 K(1,1) = s * der(1);
1526 K(2,0) = s * der(1) / T_(2);
1527 K(2,1) = s * der(0) / T_(2);
1531 template<
typename T_>
1535 K(0,0) = s * der(0);
1540 K(1,0) = s * der(1) / T_(2);
1541 K(1,1) = s * der(0) / T_(2);
1545 K(2,0) = s * der(2) / T_(2);
1547 K(2,2) = s * der(0) / T_(2);
1550 K(3,0) = s * der(1) / T_(2);
1551 K(3,1) = s * der(0) / T_(2);
1556 K(4,1) = s * der(1);
1561 K(5,1) = s * der(2) / T_(2);
1562 K(5,2) = s * der(1) / T_(2);
1565 K(6,0) = s * der(2) / T_(2);
1567 K(6,1) = s * der(0) / T_(2);
1571 K(7,1) = s * der(2) / T_(2);
1572 K(7,2) = s * der(1) / T_(2);
1577 K(8,2) = s * der(2);
1581 template<
typename T_>
1590 K(0,0) = s * der(0);
1596 K(1,1) = s * der(1);
1602 K(2,2) = s * der(2);
1605 K(3,0) = s * der(1) / T_(2);
1606 K(3,1) = s * der(0) / T_(2);
1611 K(4,1) = s * der(2) / T_(2);
1612 K(4,2) = s * der(1) / T_(2);
1615 K(5,0) = s * der(2) / T_(2);
1617 K(5,2) = s * der(0) / T_(2);
1620 ValueType
eval(
const TrialBasisData& phi,
const TestBasisData& psi)
1623 eval(K, phi.grad, psi.value);
Bilinear Operator Evaluator class template.
Base class for Bilinear Operators.
Biharmonic evaluator class template.
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
DataType ValueType
the operator's value type
ValueType eval(const TrialBasisData &phi, const TestBasisData &psi)
Evaluation operator.
Evaluator(const BiharmonicOperator &operat)
Constructor.
AsmTraits_::DataType DataType
the data type to be used
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
Biharmonic "Laplace^2" operator implementation.
AsmTraits_::DataType DataType
the data type to be used
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
DataType ValueType
the operator's value type
const int ic
Column index.
ValueType eval(const TrialBasisData &phi, const TestBasisData &psi)
Evaluation operator.
Evaluator(const DivDivOperator &operat)
Constructor.
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
div(phi) * div(psi) operator implementation
DivDivOperator(int ir_, int ic_)
Constructor.
Du : Dv evaluator class template.
const int ic
Column index.
Evaluator(const DuDvOperator &operat)
Constructor.
AsmTraits_::DataType DataType
the data type to be used
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
DataType ValueType
the operator's value type
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
ValueType eval(const TrialBasisData &phi, const TestBasisData &psi)
Evaluation operator.
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
Du : Dv evaluator class template.
ValueType eval(const TrialBasisData &phi, const TestBasisData &psi)
Evaluation operator.
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
Evaluator(const DuDvOperatorBlocked &operat)
Constructor.
Tiny::Matrix< DataType, dimension_, dimension_ > ValueType
the data type for the block system
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
AsmTraits_::DataType DataType
the data type to be used
Du:Dv operator implementation.
static constexpr int BlockWidth
Every block is a dimension x dimension matrix.
static constexpr int BlockHeight
Every block is a dimension x dimension matrix.
Du:Dv operator implementation.
DuDvOperator(int ir_, int ic_)
Constructor.
AsmTraits_::DataType DataType
the data type to be used
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
Tiny::Matrix< DataType, dimension_, 1 > ValueType
the data type for the block system
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
Gradient operator applied onto the test function.
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
AsmTraits_::DataType DataType
the data type to be used
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
Tiny::Matrix< DataType, dimension_, 1 > ValueType
the data type for the block system
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
Gradient operator applied onto the trial function.
Bilinear scalar Identity evaluator class template.
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
Evaluator(const IdentityOperator &operat)
Constructor.
ValueType eval(const TrialBasisData &phi, const TestBasisData &psi)
Evaluation operator.
DataType ValueType
the operator's value type
AsmTraits_::DataType DataType
the data type to be used
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
Vector-valued identity operator evaluator class template.
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
AsmTraits_::DataType DataType
the data type to be used
Evaluator(const IdentityOperatorBlocked &operat)
Constructor.
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
Tiny::Matrix< DataType, dimension_, dimension_ > ValueType
the data type for the block system
ValueType eval(const TrialBasisData &phi, const TestBasisData &psi)
Evaluation operator.
Vector-valued identity operator implementation.
static constexpr int BlockHeight
Every block is a dimension x dimension matrix.
static constexpr int BlockWidth
Every block is a dimension x dimension matrix.
Identity operator implementation.
Laplace-Beltrami evaluator class template.
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
ValueType eval(const TrialBasisData &phi, const TestBasisData &psi)
Evaluation operator.
Tiny::Matrix< DataType, TrafoEvaluator::domain_dim, TrafoEvaluator::domain_dim > gram_mat
the transformation Gram matrix and its inverse
DataType ValueType
the operator's value type
AsmTraits_::DataType DataType
the data type to be used
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
AsmTraits_::TrafoEvaluator TrafoEvaluator
trafo evaluator type
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
Laplace-Beltrami operator implementation.
static constexpr SpaceTags trial_config
we need reference gradients from the trial space
static constexpr SpaceTags test_config
we need reference gradients from the test space
Laplace evaluator class template.
ValueType eval(const TrialBasisData &phi, const TestBasisData &psi)
Evaluation operator.
DataType ValueType
the operator's value type
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
Evaluator(const LaplaceOperator &operat)
Constructor.
AsmTraits_::DataType DataType
the data type to be used
Laplace evaluator class template.
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
Evaluator(const LaplaceOperatorBlocked &operat)
Constructor.
ValueType eval(const TrialBasisData &phi, const TestBasisData &psi)
Evaluation operator.
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
Tiny::Matrix< DataType, dimension_, dimension_ > ValueType
the operator's value type
AsmTraits_::DataType DataType
the data type to be used
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
-Laplace operator implementation
static constexpr int BlockWidth
Every block is a dimension x dimension matrix.
static constexpr int BlockHeight
Every block is a dimension x dimension matrix.
-Laplace operator implementation
AsmTraits_::DataType DataType
the data type to be used
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
Tiny::Matrix< DataType, dimension_, dimension_ > ValueType
the data type for the block system
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
(gradu*n)*v operator implementation
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
AsmTraits_::DataType DataType
the data type to be used
Tiny::Matrix< DataType, dimension_, dimension_ > ValueType
the data type for the block system
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
(gradu^T*n)*v operator implementation
static void eval(Tiny::Matrix< T_, 6, 3, 6, 3 > &K, const Tiny::Vector< T_, 3, 3 > &der, const T_ s)
symmetric 3D version with 6 stress components
static void eval(Tiny::Matrix< T_, 4, 2, 4, 2 > &K, const Tiny::Vector< T_, 2, 2 > &der, const T_ s)
unsymmetric 2D version with 4 stress components
static void eval(Tiny::Matrix< T_, 3, 2, 3, 2 > &K, const Tiny::Vector< T_, 2, 2 > &der, const T_ s)
symmetric 2D version with 3 stress components
static void eval(Tiny::Matrix< T_, 9, 3, 9, 3 > &K, const Tiny::Vector< T_, 3, 3 > &der, const T_ s)
unsymmetric 3D version with 9 stress components
Strain-Rate-Tensor Operator.
static void eval(Tiny::Matrix< T_, 3, 9, 3, 9 > &R, const Tiny::Vector< T_, 3, 3 > &der, const T_ u)
unsymmetric 3D version with 9 stress components
static void eval(Tiny::Matrix< T_, 2, 4, 2, 4 > &R, const Tiny::Vector< T_, 2, 2 > &der, const T_ u)
unsymmetric 2D version with 4 stress components
static void eval(Tiny::Matrix< T_, 3, 6, 3, 6 > &R, const Tiny::Vector< T_, 3, 3 > &der, const T_ u)
symmetric 3D version with 6 stress components
static void eval(Tiny::Matrix< T_, 2, 3, 2, 3 > &R, const Tiny::Vector< T_, 2, 2 > &der, const T_ u)
symmetric 2D version with 3 stress components
Stress-Divergence Operator.
Test-Derivative evaluator class template.
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
DataType ValueType
the operator's value type
ValueType eval(const TrialBasisData &phi, const TestBasisData &psi)
Evaluation operator.
const int deriv
the desired derivative
Evaluator(const TestDerivativeOperator &operat)
Constructor.
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
AsmTraits_::DataType DataType
the data type to be used
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
Test-Derivative operator implementation.
int deriv
the desired derivative
Trial-Derivative evaluator class template.
ValueType eval(const TrialBasisData &phi, const TestBasisData &psi)
Evaluation operator.
AsmTraits_::DataType DataType
the data type to be used
const int deriv
the desired derivative
AsmTraits_::TrialBasisData TrialBasisData
the assembler's trial-function data type
Evaluator(const TrialDerivativeOperator &operat)
Constructor.
DataType ValueType
the operator's value type
AsmTraits_::TestBasisData TestBasisData
the assembler's test-function data type
AsmTraits_::TrafoData TrafoData
the assembler's trafo data type
Trial-Derivative operator implementation.
int deriv
the desired derivative
Tiny Matrix class template.
CUDA_HOST_DEVICE Matrix & add_scalar_main_diag(DataType alpha)
Adds a value onto the matrix's main diagonal.
CUDA_HOST_DEVICE Matrix & set_inverse(const Matrix< T_, m_, n_, sma_, sna_ > &a)
Sets this matrix to the inverse of another matrix.
CUDA_HOST_DEVICE DataType scalar_product(const Vector< T_, m_, snx_ > &x, const Vector< T_, n_, sny_ > &y) const
Computes the scalar product of two vectors with this matrix.
CUDA_HOST_DEVICE Matrix & set_gram(const Matrix< T_, l_, n_, sla_, sna_ > &a)
Sets this matrix to the Gram matrix of another matrix.
CUDA_HOST_DEVICE Matrix & set_outer_product(const Vector< T_, m_, snx_ > &x, const Vector< T_, n_, sny_ > &y)
Sets this matrix to the outer product of two vectors.
Tiny Vector class template.
CUDA_HOST_DEVICE T_ dot(const T_ &a, const T_ &b)
Computes the dot-product of two scalars.
SpaceTags
Space configuration tags enum.
@ value
specifies whether the space should supply basis function values
@ hess
specifies whether the space should supply basis function hessians
@ ref_grad
specifies whether the space should supply reference basis function gradients
@ grad
specifies whether the space should supply basis function gradients
TrafoTags
Trafo configuration tags enum.
@ jac_det
specifies whether the trafo should supply jacobian determinants