v0.16.0
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Public Attributes | List of all members
EigenMatrix::Fdd4MImpl< E, C > Struct Template Reference

#include "src/ftensor/src/MatrixFunctionTemplate.hpp"

Collaboration diagram for EigenMatrix::Fdd4MImpl< E, C >:
[legend]

Public Types

using Val = typename E::Val
 
using Vec = typename E::Vec
 
using Fun = typename E::Fun
 
using NumberNb = typename E::NumberNb
 
using NumberDim = typename E::NumberDim
 

Public Member Functions

 Fdd4MImpl (E &e)
 
template<int A, int a, int b, int I, int J, int K, int L>
auto fd2M () const
 
template<int a, int b, int i, int j, int k, int l, int m, int n>
auto term_fd2S (const Number< a > &, const Number< b > &, const Number< i > &, const Number< j > &, const Number< k > &, const Number< l > &, const Number< m > &, const Number< n > &) const
 
template<int NB, int a, int b, int i, int j, int k, int l, int m, int n>
term_SM (const Number< a > &, const Number< b > &, const Number< NB > &, const Number< i > &, const Number< j > &, const Number< k > &, const Number< l > &, const Number< m > &, const Number< n > &) const
 
template<int nb, int a, int i, int j, int k, int l, int m, int n>
eval_fdS2 (const Number< nb > &, const Number< a > &, const Number< i > &, const Number< j > &, const Number< k > &, const Number< l > &, const Number< m > &, const Number< n > &) const
 
template<int a, int i, int j, int k, int l, int m, int n>
eval_fdS2 (const Number< 1 > &, const Number< a > &, const Number< i > &, const Number< j > &, const Number< k > &, const Number< l > &, const Number< m > &, const Number< n > &) const
 
template<int nb, int a, int i, int j, int k, int l, int m, int n>
eval_SM (const Number< nb > &, const Number< a > &, const Number< i > &, const Number< j > &, const Number< k > &, const Number< l > &, const Number< m > &, const Number< n > &) const
 
template<int a, int i, int j, int k, int l, int m, int n>
eval_SM (const Number< 1 > &, const Number< a > &, const Number< i > &, const Number< j > &, const Number< k > &, const Number< l > &, const Number< m > &, const Number< n > &) const
 
template<int nb, int a, int i, int j, int k, int l, int m, int n>
eval (const Number< nb > &, const Number< a > &, const Number< i > &, const Number< j > &, const Number< k > &, const Number< l > &, const Number< m > &, const Number< n > &) const
 

Public Attributes

Ee
 

Detailed Description

template<typename E, typename C>
struct EigenMatrix::Fdd4MImpl< E, C >

Definition at line 163 of file MatrixFunctionTemplate.hpp.

Member Typedef Documentation

◆ Fun

template<typename E , typename C >
using EigenMatrix::Fdd4MImpl< E, C >::Fun = typename E::Fun

Definition at line 166 of file MatrixFunctionTemplate.hpp.

◆ NumberDim

template<typename E , typename C >
using EigenMatrix::Fdd4MImpl< E, C >::NumberDim = typename E::NumberDim

Definition at line 172 of file MatrixFunctionTemplate.hpp.

◆ NumberNb

template<typename E , typename C >
using EigenMatrix::Fdd4MImpl< E, C >::NumberNb = typename E::NumberNb

Definition at line 171 of file MatrixFunctionTemplate.hpp.

◆ Val

template<typename E , typename C >
using EigenMatrix::Fdd4MImpl< E, C >::Val = typename E::Val

Definition at line 164 of file MatrixFunctionTemplate.hpp.

◆ Vec

template<typename E , typename C >
using EigenMatrix::Fdd4MImpl< E, C >::Vec = typename E::Vec

Definition at line 165 of file MatrixFunctionTemplate.hpp.

Constructor & Destructor Documentation

◆ Fdd4MImpl()

template<typename E , typename C >
EigenMatrix::Fdd4MImpl< E, C >::Fdd4MImpl ( E e)
inline

Definition at line 168 of file MatrixFunctionTemplate.hpp.

Member Function Documentation

◆ eval()

template<typename E , typename C >
template<int nb, int a, int i, int j, int k, int l, int m, int n>
C EigenMatrix::Fdd4MImpl< E, C >::eval ( const Number< nb > &  ,
const Number< a > &  ,
const Number< i > &  ,
const Number< j > &  ,
const Number< k > &  ,
const Number< l > &  ,
const Number< m > &  ,
const Number< n > &   
) const
inline

Definition at line 337 of file MatrixFunctionTemplate.hpp.

339 {
340 return
341
342 (2 * e.fVal(a)) * eval_SM(NumberDim(), Number<a>(), Number<i>(),
343 Number<j>(), Number<k>(), Number<l>(),
344 Number<m>(), Number<n>())
345
346 +
347
348 eval_fdS2(NumberDim(), Number<a>(), Number<i>(), Number<j>(),
349 Number<k>(), Number<l>(), Number<m>(), Number<n>());
350 }
constexpr double a
typename E::NumberDim NumberDim
C eval_SM(const Number< nb > &, const Number< a > &, const Number< i > &, const Number< j > &, const Number< k > &, const Number< l > &, const Number< m > &, const Number< n > &) const
C eval_fdS2(const Number< nb > &, const Number< a > &, const Number< i > &, const Number< j > &, const Number< k > &, const Number< l > &, const Number< m > &, const Number< n > &) const

◆ eval_fdS2() [1/2]

template<typename E , typename C >
template<int a, int i, int j, int k, int l, int m, int n>
C EigenMatrix::Fdd4MImpl< E, C >::eval_fdS2 ( const Number< 1 > &  ,
const Number< a > &  ,
const Number< i > &  ,
const Number< j > &  ,
const Number< k > &  ,
const Number< l > &  ,
const Number< m > &  ,
const Number< n > &   
) const
inline

Definition at line 298 of file MatrixFunctionTemplate.hpp.

300 {
301 if constexpr (a != 0)
302 return term_fd2S(Number<a>(), Number<0>(), Number<i>(), Number<j>(),
303 Number<k>(), Number<l>(), Number<m>(), Number<n>());
304 else
305 return 0;
306 }
auto term_fd2S(const Number< a > &, const Number< b > &, const Number< i > &, const Number< j > &, const Number< k > &, const Number< l > &, const Number< m > &, const Number< n > &) const

◆ eval_fdS2() [2/2]

template<typename E , typename C >
template<int nb, int a, int i, int j, int k, int l, int m, int n>
C EigenMatrix::Fdd4MImpl< E, C >::eval_fdS2 ( const Number< nb > &  ,
const Number< a > &  ,
const Number< i > &  ,
const Number< j > &  ,
const Number< k > &  ,
const Number< l > &  ,
const Number< m > &  ,
const Number< n > &   
) const
inline

Definition at line 284 of file MatrixFunctionTemplate.hpp.

286 {
287 if constexpr (a != nb - 1)
288 return term_fd2S(Number<a>(), Number<nb - 1>(), Number<i>(), Number<j>(),
289 Number<k>(), Number<l>(), Number<m>(), Number<n>()) +
290 eval_fdS2(Number<nb - 1>(), Number<a>(), Number<i>(), Number<j>(),
291 Number<k>(), Number<l>(), Number<m>(), Number<n>());
292 else
293 return eval_fdS2(Number<nb - 1>(), Number<a>(), Number<i>(), Number<j>(),
294 Number<k>(), Number<l>(), Number<m>(), Number<n>());
295 }
FTensor::Number< N > Number

◆ eval_SM() [1/2]

template<typename E , typename C >
template<int a, int i, int j, int k, int l, int m, int n>
C EigenMatrix::Fdd4MImpl< E, C >::eval_SM ( const Number< 1 > &  ,
const Number< a > &  ,
const Number< i > &  ,
const Number< j > &  ,
const Number< k > &  ,
const Number< l > &  ,
const Number< m > &  ,
const Number< n > &   
) const
inline

Definition at line 325 of file MatrixFunctionTemplate.hpp.

327 {
328 if constexpr (a != 0)
329 return term_SM(Number<a>(), Number<0>(), NumberNb(), Number<i>(),
330 Number<j>(), Number<k>(), Number<l>(), Number<m>(),
331 Number<n>());
332 else
333 return 0;
334 }
C term_SM(const Number< a > &, const Number< b > &, const Number< NB > &, const Number< i > &, const Number< j > &, const Number< k > &, const Number< l > &, const Number< m > &, const Number< n > &) const

◆ eval_SM() [2/2]

template<typename E , typename C >
template<int nb, int a, int i, int j, int k, int l, int m, int n>
C EigenMatrix::Fdd4MImpl< E, C >::eval_SM ( const Number< nb > &  ,
const Number< a > &  ,
const Number< i > &  ,
const Number< j > &  ,
const Number< k > &  ,
const Number< l > &  ,
const Number< m > &  ,
const Number< n > &   
) const
inline

Definition at line 309 of file MatrixFunctionTemplate.hpp.

311 {
312 if constexpr (a != nb - 1)
313 return term_SM(Number<a>(), Number<nb - 1>(), NumberNb(), Number<i>(),
314 Number<j>(), Number<k>(), Number<l>(), Number<m>(),
315 Number<n>()) +
316 eval_SM(Number<nb - 1>(), Number<a>(), Number<i>(), Number<j>(),
317 Number<k>(), Number<l>(), Number<m>(), Number<n>());
318
319 else
320 return eval_SM(Number<nb - 1>(), Number<a>(), Number<i>(), Number<j>(),
321 Number<k>(), Number<l>(), Number<m>(), Number<n>());
322 }

◆ fd2M()

template<typename E , typename C >
template<int A, int a, int b, int I, int J, int K, int L>
auto EigenMatrix::Fdd4MImpl< E, C >::fd2M ( ) const
inline

Definition at line 175 of file MatrixFunctionTemplate.hpp.

175 {
176 return e.d2MType1[b][get_sym_index(Number<A>(), Number<a>(), NumberDim())](
177 Number<I>(), Number<J>(), Number<K>(), Number<L>());
178 }
auto get_sym_index(const Number< N1 > &, const Number< N2 > &, const Number< Dim > &)

◆ term_fd2S()

template<typename E , typename C >
template<int a, int b, int i, int j, int k, int l, int m, int n>
auto EigenMatrix::Fdd4MImpl< E, C >::term_fd2S ( const Number< a > &  ,
const Number< b > &  ,
const Number< i > &  ,
const Number< j > &  ,
const Number< k > &  ,
const Number< l > &  ,
const Number< m > &  ,
const Number< n > &   
) const
inline

Definition at line 181 of file MatrixFunctionTemplate.hpp.

183 {
184 if constexpr (i == j && k == l) {
185 return 4 *
186 (
187
188 fd2M<a, a, b, i, k, m, n>() * e.aM[b](Number<j>(), Number<l>())
189
190 +
191
192 fd2M<b, a, b, i, k, m, n>() * e.aM[a](Number<j>(), Number<l>())
193
194 );
195
196 } else if constexpr (i == j)
197 return 2 *
198 (
199
200 fd2M<a, a, b, i, k, m, n>() *
201 e.aM[b](Number<j>(), Number<l>()) +
202 fd2M<b, a, b, j, l, m, n>() * e.aM[a](Number<i>(), Number<k>())
203
204 +
205
206 fd2M<b, a, b, i, k, m, n>() *
207 e.aM[a](Number<j>(), Number<l>()) +
208 fd2M<a, a, b, j, l, m, n>() * e.aM[b](Number<i>(), Number<k>())
209
210 );
211 else if constexpr (k == l)
212 return 2 *
213 (
214
215 fd2M<a, a, b, i, k, m, n>() *
216 e.aM[b](Number<j>(), Number<l>()) +
217 fd2M<b, a, b, j, l, m, n>() *
218 e.aM[a](Number<i>(), Number<k>()) +
219
220 +
221
222 fd2M<b, a, b, i, k, m, n>() *
223 e.aM[a](Number<j>(), Number<l>()) +
224 fd2M<a, a, b, j, l, m, n>() * e.aM[b](Number<i>(), Number<k>())
225
226 );
227 else
228 return fd2M<a, a, b, i, k, m, n>() * e.aM[b](Number<j>(), Number<l>()) +
229 fd2M<b, a, b, j, l, m, n>() * e.aM[a](Number<i>(), Number<k>()) +
230 fd2M<a, a, b, i, l, m, n>() * e.aM[b](Number<j>(), Number<k>()) +
231 fd2M<b, a, b, j, k, m, n>() * e.aM[a](Number<i>(), Number<l>())
232
233 +
234
235 fd2M<b, a, b, i, k, m, n>() * e.aM[a](Number<j>(), Number<l>()) +
236 fd2M<a, a, b, j, l, m, n>() * e.aM[b](Number<i>(), Number<k>()) +
237 fd2M<b, a, b, i, l, m, n>() * e.aM[a](Number<j>(), Number<k>()) +
238 fd2M<a, a, b, j, k, m, n>() * e.aM[b](Number<i>(), Number<l>());
239 }
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k

◆ term_SM()

template<typename E , typename C >
template<int NB, int a, int b, int i, int j, int k, int l, int m, int n>
C EigenMatrix::Fdd4MImpl< E, C >::term_SM ( const Number< a > &  ,
const Number< b > &  ,
const Number< NB > &  ,
const Number< i > &  ,
const Number< j > &  ,
const Number< k > &  ,
const Number< l > &  ,
const Number< m > &  ,
const Number< n > &   
) const
inline

Definition at line 242 of file MatrixFunctionTemplate.hpp.

245 {
246
247 if constexpr (NB == 1) {
248 return 0;
249
250 } else if constexpr (NB == 2) {
251
252 if constexpr (a == 1 || b == 1) {
253 return
254
255 e.aF2(Number<a>(), Number<b>()) *
256 (e.aSM[get_nodiag_index(Number<b>(), Number<a>(), NumberDim())]
257 [get_sym_index(Number<m>(), Number<n>(), NumberDim())](
258 Number<i>(), Number<j>(), Number<k>(), Number<l>()) -
259 e.aSM[get_nodiag_index(Number<a>(), Number<b>(), NumberDim())]
260 [get_sym_index(Number<m>(), Number<n>(), NumberDim())](
261 Number<i>(), Number<j>(), Number<k>(), Number<l>()));
262
263 } else {
264 return 0;
265 }
266
267 } else {
268
269 return
270
271 e.aF2(Number<a>(), Number<b>()) *
272 (e.aSM[get_nodiag_index(Number<b>(), Number<a>(), NumberDim())]
273 [get_sym_index(Number<m>(), Number<n>(), NumberDim())](
274 Number<i>(), Number<j>(), Number<k>(), Number<l>()) -
275 e.aSM[get_nodiag_index(Number<a>(), Number<b>(), NumberDim())]
276 [get_sym_index(Number<m>(), Number<n>(), NumberDim())](
277 Number<i>(), Number<j>(), Number<k>(), Number<l>()));
278 }
279
280 return 0;
281 }
auto get_nodiag_index(const Number< N1 > &, const Number< N2 > &, const Number< Dim > &)

Member Data Documentation

◆ e

template<typename E , typename C >
E& EigenMatrix::Fdd4MImpl< E, C >::e

Definition at line 169 of file MatrixFunctionTemplate.hpp.


The documentation for this struct was generated from the following file: