Loading [MathJax]/extensions/AMSmath.js
v0.14.0
Main Page
Why MoFEM
Features
Applications
Publications
Installation
Installation with Docker - JupyterHub
Installation with Docker - Advanced
Installation with Spack - Scripts
Installation with Spack - Advanced
Videos
UKACM School 2023
UKACM School 2021
Video guides
Conference talks
Simulation examples
Developer
Architecture
Tutorials
Operators
Frequently Asked Questions
Writing documentation
Coding practice
Search
Source Code
Source files
Source groups
Examples
Jenkins
CDash
Related Pages
Modules
Q&A
Repository
Library
About
Authors
Contact
Legal stuff
Contributing
Vacancies
Third party libraries
Acknowledgments
Bibliography
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
src
ftensor
src
FTensor
Tensor2_symmetric
Tensor2_symmetric_carat_Tensor2_symmetric.hpp
Go to the documentation of this file.
1
/* Multiply a Tensor2_symmetric cart a Tensor2_symmetric together and yieald DDg
2
* tensor. */
3
4
/* A(i,j) ^ B(i,j) -> Ddg */
5
6
#pragma once
7
8
namespace
FTensor
{
9
10
template
<
class
A
,
class
B,
class
T,
class
U
,
int
Dim,
char
i
,
char
j
,
char
k
,
11
char
l
>
12
class
Tensor2_symmetric_carat_Tensor2_symmetric
{
13
const
Tensor2_symmetric_Expr<A, T, Dim, i, k>
iterA
;
14
const
Tensor2_symmetric_Expr<B, T, Dim, j, l>
iterB
;
15
16
inline
typename
promote<T, U>::V
eval
(
const
int
N1,
const
int
N2,
17
const
int
N3,
const
int
N4)
const
{
18
auto
small_eval = [&](
auto
n1,
auto
n2,
auto
n3,
auto
n4) {
19
return
iterA
(n1, n3) *
iterB
(n2, n4);
20
};
21
return
small_eval(N1, N2, N3, N4) + small_eval(N2, N1, N3, N4) +
22
small_eval(N1, N2, N4, N3) + small_eval(N2, N1, N4, N3);
23
}
24
25
public
:
26
Tensor2_symmetric_carat_Tensor2_symmetric
(
27
const
Tensor2_symmetric_Expr<A, T, Dim, i, k>
&
a
,
28
const
Tensor2_symmetric_Expr<B, U, Dim, j, l>
&b)
29
:
iterA
(
a
),
iterB
(b) {}
30
typename
promote<T, U>::V
operator()
(
const
int
N1,
const
int
N2,
const
int
N3,
31
const
int
N4)
const
{
32
return
eval
(N1, N2, N3, N4);
33
}
34
};
35
36
template
<
class
A
,
class
B,
class
T,
class
U
,
int
Dim,
char
i
,
char
j
,
char
k
,
37
char
l
>
38
Ddg_Expr<Tensor2_symmetric_carat_Tensor2_symmetric<A, B, T, U, Dim, i, j, k, l>,
39
typename
promote<T, U>::V
, Dim, Dim,
i
,
j
,
k
,
l
>
40
operator^
(
const
Tensor2_symmetric_Expr<A, T, Dim, i, k>
&
a
,
41
const
Tensor2_symmetric_Expr<B, U, Dim, j, l>
&b) {
42
using
TensorExpr =
43
Tensor2_symmetric_carat_Tensor2_symmetric<A, B, T, U, Dim, i, j, k, l>
;
44
return
Ddg_Expr<TensorExpr, typename promote<T, U>::V
, Dim, Dim,
i
,
j
,
k
,
l
>(
45
TensorExpr(
a
, b));
46
}
47
48
}
// namespace FTensor
FTensor::operator^
Ddg_Expr< Ddg_carat_Ddg_13< A, B, T, U, Dim, Dim23, i, j, k, l, m, n >, typename promote< T, U >::V, Dim, Dim23, i, k, m, n > operator^(const Ddg_Expr< A, T, Dim, Dim, i, j, k, l > &a, const Ddg_Expr< B, U, Dim, Dim23, j, l, m, n > &b)
Definition:
Ddg_carat_Ddg.hpp:59
FTensor
JSON compatible output.
Definition:
Christof_constructor.hpp:6
FTensor::Tensor2_symmetric_carat_Tensor2_symmetric::eval
promote< T, U >::V eval(const int N1, const int N2, const int N3, const int N4) const
Definition:
Tensor2_symmetric_carat_Tensor2_symmetric.hpp:16
FTensor::Tensor2_symmetric_carat_Tensor2_symmetric::Tensor2_symmetric_carat_Tensor2_symmetric
Tensor2_symmetric_carat_Tensor2_symmetric(const Tensor2_symmetric_Expr< A, T, Dim, i, k > &a, const Tensor2_symmetric_Expr< B, U, Dim, j, l > &b)
Definition:
Tensor2_symmetric_carat_Tensor2_symmetric.hpp:26
FTensor::Tensor2_symmetric_Expr< A, T, Dim, i, k >
A
constexpr AssemblyType A
Definition:
operators_tests.cpp:30
FTensor::Ddg_Expr
Definition:
Ddg_Expr.hpp:28
a
constexpr double a
Definition:
approx_sphere.cpp:30
FTensor::promote::V
T1 V
Definition:
promote.hpp:17
FTensor::Tensor2_symmetric_carat_Tensor2_symmetric::operator()
promote< T, U >::V operator()(const int N1, const int N2, const int N3, const int N4) const
Definition:
Tensor2_symmetric_carat_Tensor2_symmetric.hpp:30
FTensor::Tensor2_symmetric_carat_Tensor2_symmetric::iterB
const Tensor2_symmetric_Expr< B, T, Dim, j, l > iterB
Definition:
Tensor2_symmetric_carat_Tensor2_symmetric.hpp:14
i
FTensor::Index< 'i', SPACE_DIM > i
Definition:
hcurl_divergence_operator_2d.cpp:27
j
FTensor::Index< 'j', 3 > j
Definition:
matrix_function.cpp:19
FTensor::Tensor2_symmetric_carat_Tensor2_symmetric
Definition:
Tensor2_symmetric_carat_Tensor2_symmetric.hpp:12
k
FTensor::Index< 'k', 3 > k
Definition:
matrix_function.cpp:20
FTensor::Tensor2_symmetric_carat_Tensor2_symmetric::iterA
const Tensor2_symmetric_Expr< A, T, Dim, i, k > iterA
Definition:
Tensor2_symmetric_carat_Tensor2_symmetric.hpp:13
EshelbianPlasticity::U
@ U
Definition:
EshelbianContact.cpp:201
l
FTensor::Index< 'l', 3 > l
Definition:
matrix_function.cpp:21
Generated by
Doxygen
1.8.17 and hosted at