v0.14.0
Classes | Typedefs | Functions
EigenMatrix Namespace Reference

Classes

struct  d2MCoefficients
 
struct  d2MImpl
 
struct  EigenMatrixImp
 
struct  Fdd4MImpl
 
struct  FirstMatrixDirectiveImpl
 
struct  GetDiffDiffMatImpl
 
struct  GetDiffDiffMatImpl< E, C, T1, FTensor::Tensor2_symmetric< VT2, DimT2 > >
 
struct  GetDiffMatImpl
 
struct  GetMatImpl
 
struct  ReconstructMatImpl
 
struct  SecondMatrixDirectiveImpl
 

Typedefs

template<typename T , int Dim>
using Val = const FTensor::Tensor1< T, Dim >
 
template<typename T , int Dim>
using Vec = const FTensor::Tensor2< T, Dim, Dim >
 
template<typename T , int Dim>
using VecSymm = const FTensor::Tensor2_symmetric< T, Dim >
 
template<typename T >
using Fun = boost::function< T(const T)>
 
template<int N>
using Number = FTensor::Number< N >
 

Functions

template<typename T , int Dim>
FTensor::Tensor2_symmetric< double, Dim > getMatImpl (Val< T, Dim > &t_val, Vec< T, Dim > &t_vec, Fun< double > f)
 
template<typename T , int Dim>
FTensor::Ddg< double, Dim, Dim > getDiffMatImpl (Val< T, Dim > &t_val, Vec< T, Dim > &t_vec, Fun< double > f, Fun< double > d_f, const int nb)
 
template<typename T , typename S , int Dim>
FTensor::Ddg< double, Dim, Dim > getDiffDiffMatImpl (Val< T, Dim > &t_val, Vec< T, Dim > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, S &t_S, const int nb)
 
FTensor::Tensor2_symmetric< double, 3 > getMatSpecial (Val< double, 3 > &t_val, Vec< double, 3 > &t_vec, Fun< double > f)
 Get the Mat object. More...
 
FTensor::Tensor2_symmetric< double, 3 > getMatSpecial (Val< FTensor::PackPtr< double *, 1 >, 3 > &t_val, Vec< FTensor::PackPtr< double *, 1 >, 3 > &t_vec, Fun< double > f)
 Get the Mat object. More...
 
FTensor::Ddg< double, 3, 3 > getDiffMatSpecial (Val< double, 3 > &t_val, Vec< double, 3 > &t_vec, Fun< double > f, Fun< double > d_f, const int nb)
 Get the Diff Mat object. More...
 
FTensor::Ddg< double, 3, 3 > getDiffMatSpecial (Val< FTensor::PackPtr< double *, 1 >, 3 > &t_val, Vec< FTensor::PackPtr< double *, 1 >, 3 > &t_vec, Fun< double > f, Fun< double > d_f, const int nb)
 Get the Diff Mat object. More...
 
FTensor::Ddg< double, 3, 3 > getDiffDiffMatSpecial (Val< double, 3 > &t_val, Vec< double, 3 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2< double, 3, 3 > &t_S, const int nb)
 Get the Diff Diff Mat object. More...
 
FTensor::Ddg< double, 3, 3 > getDiffDiffMatSpecial (Val< FTensor::PackPtr< double *, 1 >, 3 > &t_val, Vec< FTensor::PackPtr< double *, 1 >, 3 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2< double, 3, 3 > &t_S, const int nb)
 Get the Diff Diff Mat object. More...
 
FTensor::Ddg< double, 3, 3 > getDiffDiffMatSpecial (Val< double, 3 > &t_val, Vec< double, 3 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2_symmetric< double, 3 > &t_S, const int nb)
 Get the Diff Diff Mat object. More...
 
FTensor::Ddg< double, 3, 3 > getDiffDiffMatSpecial (Val< FTensor::PackPtr< double *, 1 >, 3 > &t_val, Vec< FTensor::PackPtr< double *, 1 >, 3 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2_symmetric< double, 3 > &t_S, const int nb)
 Get the Diff Diff Mat object. More...
 
FTensor::Tensor2_symmetric< double, 2 > getMatSpecial (Val< double, 2 > &t_val, Vec< double, 2 > &t_vec, Fun< double > f)
 Get the Mat object. More...
 
FTensor::Tensor2_symmetric< double, 2 > getMatSpecial (Val< FTensor::PackPtr< double *, 1 >, 2 > &t_val, Vec< FTensor::PackPtr< double *, 1 >, 2 > &t_vec, Fun< double > f)
 Get the Mat object. More...
 
FTensor::Ddg< double, 2, 2 > getDiffMatSpecial (Val< double, 2 > &t_val, Vec< double, 2 > &t_vec, Fun< double > f, Fun< double > d_f, const int nb)
 Get the Diff Mat object. More...
 
FTensor::Ddg< double, 2, 2 > getDiffMatSpecial (Val< FTensor::PackPtr< double *, 1 >, 2 > &t_val, Vec< FTensor::PackPtr< double *, 1 >, 2 > &t_vec, Fun< double > f, Fun< double > d_f, const int nb)
 Get the Diff Mat object. More...
 
FTensor::Ddg< double, 2, 2 > getDiffDiffMatSpecial (Val< double, 2 > &t_val, Vec< double, 2 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2< double, 2, 2 > &t_S, const int nb)
 Get the Diff Diff Mat object. More...
 
FTensor::Ddg< double, 2, 2 > getDiffDiffMatSpecial (Val< double, 2 > &t_val, Vec< double, 2 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2_symmetric< double, 2 > &t_S, const int nb)
 Get the Diff Diff Mat object. More...
 
FTensor::Ddg< double, 2, 2 > getDiffDiffMatSpecial (Val< FTensor::PackPtr< double *, 1 >, 2 > &t_val, Vec< FTensor::PackPtr< double *, 1 >, 2 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2< double, 2, 2 > &t_S, const int nb)
 Get the Diff Diff Mat object. More...
 
FTensor::Ddg< double, 2, 2 > getDiffDiffMatSpecial (Val< FTensor::PackPtr< double *, 1 >, 2 > &t_val, Vec< FTensor::PackPtr< double *, 1 >, 2 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2_symmetric< double, 2 > &t_S, const int nb)
 Get the Diff Diff Mat object. More...
 
FTensor::Ddg< double, 2, 2 > getDiffDiffMatSpecial (Val< FTensor::PackPtr< double *, 1 >, 2 > &t_val, Vec< FTensor::PackPtr< double *, 1 >, 2 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2_symmetric< FTensor::PackPtr< double *, 1 >, 2 > &t_S, const int nb)
 Get the Diff Diff Mat object. More...
 
FTensor::Ddg< double, 3, 3 > getDiffDiffMatSpecial (Val< FTensor::PackPtr< double *, 1 >, 3 > &t_val, Vec< FTensor::PackPtr< double *, 1 >, 3 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2_symmetric< FTensor::PackPtr< double *, 1 >, 3 > &t_S, const int nb)
 Get the Diff Diff Mat object. More...
 
template<typename A , typename B >
auto getMat (A &&t_val, B &&t_vec, Fun< double > f)
 Get the Mat object. More...
 
template<typename A , typename B >
auto getDiffMat (A &&t_val, B &&t_vec, Fun< double > f, Fun< double > d_f, const int nb)
 Get the Diff Mat object. More...
 
template<typename A , typename B , typename C >
auto getDiffDiffMat (A &&t_val, B &&t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, C &&t_S, const int nb)
 Get the Diff Diff Mat object. More...
 
template<int N1, int N2, int Dim>
auto get_sym_index (const Number< N1 > &, const Number< N2 > &, const Number< Dim > &)
 
auto get_sym_index (const int N1, const int N2, const int Dim)
 
template<int N1, int N2, int Dim>
auto get_nodiag_index (const Number< N1 > &, const Number< N2 > &, const Number< Dim > &)
 
auto get_nodiag_index (const int N1, const int N2, int Dim)
 

Typedef Documentation

◆ Fun

template<typename T >
using EigenMatrix::Fun = typedef boost::function<T(const T)>

Definition at line 68 of file MatrixFunction.hpp.

◆ Number

template<int N>
using EigenMatrix::Number = typedef FTensor::Number<N>

Definition at line 55 of file MatrixFunctionTemplate.hpp.

◆ Val

template<typename T , int Dim>
using EigenMatrix::Val = typedef const FTensor::Tensor1<T, Dim>

Definition at line 63 of file MatrixFunction.hpp.

◆ Vec

template<typename T , int Dim>
using EigenMatrix::Vec = typedef const FTensor::Tensor2<T, Dim, Dim>

◆ VecSymm

template<typename T , int Dim>
using EigenMatrix::VecSymm = typedef const FTensor::Tensor2_symmetric<T, Dim>

Definition at line 66 of file MatrixFunction.hpp.

Function Documentation

◆ get_nodiag_index() [1/2]

auto EigenMatrix::get_nodiag_index ( const int  N1,
const int  N2,
int  Dim 
)
inline

Definition at line 83 of file MatrixFunctionTemplate.hpp.

83  {
84  if (N2 > N1)
85  return (Dim - 1) * N1 + N2 - 1;
86  else
87  return (Dim - 1) * N1 + N2;
88 }

◆ get_nodiag_index() [2/2]

template<int N1, int N2, int Dim>
auto EigenMatrix::get_nodiag_index ( const Number< N1 > &  ,
const Number< N2 > &  ,
const Number< Dim > &   
)
inline

Definition at line 74 of file MatrixFunctionTemplate.hpp.

75  {
76  static_assert(N1 != N2, "Bad index");
77  if constexpr (N2 > N1)
78  return (Dim - 1) * N1 + N2 - 1;
79  else
80  return (Dim - 1) * N1 + N2;
81 }

◆ get_sym_index() [1/2]

auto EigenMatrix::get_sym_index ( const int  N1,
const int  N2,
const int  Dim 
)
inline

Definition at line 66 of file MatrixFunctionTemplate.hpp.

66  {
67  if (N1 > N2)
68  return N1 + (N2 * (2 * Dim - N2 - 1)) / 2;
69  else
70  return N2 + (N1 * (2 * Dim - N1 - 1)) / 2;
71 }

◆ get_sym_index() [2/2]

template<int N1, int N2, int Dim>
auto EigenMatrix::get_sym_index ( const Number< N1 > &  ,
const Number< N2 > &  ,
const Number< Dim > &   
)
inline

Definition at line 58 of file MatrixFunctionTemplate.hpp.

59  {
60  if constexpr (N1 > N2)
61  return N1 + (N2 * (2 * Dim - N2 - 1)) / 2;
62  else
63  return N2 + (N1 * (2 * Dim - N1 - 1)) / 2;
64 }

◆ getDiffDiffMat()

template<typename A , typename B , typename C >
auto EigenMatrix::getDiffDiffMat ( A &&  t_val,
B &&  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
C &&  t_S,
const int  nb 
)
inline

Get the Diff Diff Mat object.

\[ LS_{klmn} = S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} } \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vectors
ffunction
d_fdirective of function
dd_fsecond directive of function
t_SS tensor
nbnumber of nonzero eigen values
Returns
FTensor::Ddg<double, 3, 3>
Examples
HenckyOps.hpp, and matrix_function.cpp.

Definition at line 279 of file MatrixFunction.hpp.

280  {
281  return getDiffDiffMatSpecial(std::forward<A>(t_val), std::forward<B>(t_vec),
282  f, d_f, dd_f, std::forward<C>(t_S), nb);
283 }

◆ getDiffDiffMatImpl()

template<typename T , typename S , int Dim>
FTensor::Ddg<double, Dim, Dim> EigenMatrix::getDiffDiffMatImpl ( Val< T, Dim > &  t_val,
Vec< T, Dim > &  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
S &  t_S,
const int  nb 
)

Definition at line 35 of file MatrixFunction.cpp.

36  {
37  switch (nb) {
38  case 1:
39  return EigenMatrixImp<T, T, 1, Dim>(t_val, t_vec)
40  .getDiffDiffMat(f, d_f, dd_f, t_S);
41  case 2:
42  return EigenMatrixImp<T, T, 2, Dim>(t_val, t_vec)
43  .getDiffDiffMat(f, d_f, dd_f, t_S);
44  case 3:
45  break;
46  default:
47  THROW_MESSAGE("third parameter should be 1,2 or 3");
48  }
49  return EigenMatrixImp<T, T, 3, Dim>(t_val, t_vec)
50  .getDiffDiffMat(f, d_f, dd_f, t_S);
51 };

◆ getDiffDiffMatSpecial() [1/10]

FTensor::Ddg< double, 2, 2 > EigenMatrix::getDiffDiffMatSpecial ( Val< double, 2 > &  t_val,
Vec< double, 2 > &  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
FTensor::Tensor2< double, 2, 2 > &  t_S,
const int  nb 
)

Get the Diff Diff Mat object.

\[ LS_{klmn} = S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} } \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vectors
ffunction
d_fdirective of function
dd_fsecond directive of function
t_SS tensor
nbnumber of nonzero eigen values
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 144 of file MatrixFunction.cpp.

146  {
147  return getDiffDiffMatImpl<double, FTensor::Tensor2<double, 2, 2>, 2>(
148  t_val, t_vec, f, d_f, dd_f, t_S, nb);
149 }

◆ getDiffDiffMatSpecial() [2/10]

FTensor::Ddg< double, 2, 2 > EigenMatrix::getDiffDiffMatSpecial ( Val< double, 2 > &  t_val,
Vec< double, 2 > &  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
FTensor::Tensor2_symmetric< double, 2 > &  t_S,
const int  nb 
)

Get the Diff Diff Mat object.

\[ LS_{klmn} = S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} } \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vectors
ffunction
d_fdirective of function
dd_fsecond directive of function
t_SS tensor
nbnumber of nonzero eigen values
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 152 of file MatrixFunction.cpp.

155  {
156  return getDiffDiffMatImpl<double, FTensor::Tensor2_symmetric<double, 2>, 2>(
157  t_val, t_vec, f, d_f, dd_f, t_S, nb);
158 }

◆ getDiffDiffMatSpecial() [3/10]

FTensor::Ddg< double, 3, 3 > EigenMatrix::getDiffDiffMatSpecial ( Val< double, 3 > &  t_val,
Vec< double, 3 > &  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
FTensor::Tensor2< double, 3, 3 > &  t_S,
const int  nb 
)

Get the Diff Diff Mat object.

\[ LS_{klmn} = S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} } \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vectors
ffunction
d_fdirective of function
dd_fsecond directive of function
t_SS tensor
nbnumber of nonzero eigen values
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 80 of file MatrixFunction.cpp.

82  {
83  return getDiffDiffMatImpl<double, FTensor::Tensor2<double, 3, 3>, 3>(
84  t_val, t_vec, f, d_f, dd_f, t_S, nb);
85 }

◆ getDiffDiffMatSpecial() [4/10]

FTensor::Ddg< double, 3, 3 > EigenMatrix::getDiffDiffMatSpecial ( Val< double, 3 > &  t_val,
Vec< double, 3 > &  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
FTensor::Tensor2_symmetric< double, 3 > &  t_S,
const int  nb 
)

Get the Diff Diff Mat object.

\[ LS_{klmn} = S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} } \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vectors
ffunction
d_fdirective of function
dd_fsecond directive of function
t_SS tensor
nbnumber of nonzero eigen values
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 98 of file MatrixFunction.cpp.

101  {
102  return getDiffDiffMatImpl<double, FTensor::Tensor2_symmetric<double, 3>, 3>(
103  t_val, t_vec, f, d_f, dd_f, t_S, nb);
104 }

◆ getDiffDiffMatSpecial() [5/10]

FTensor::Ddg< double, 2, 2 > EigenMatrix::getDiffDiffMatSpecial ( Val< FTensor::PackPtr< double *, 1 >, 2 > &  t_val,
Vec< FTensor::PackPtr< double *, 1 >, 2 > &  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
FTensor::Tensor2< double, 2, 2 > &  t_S,
const int  nb 
)

Get the Diff Diff Mat object.

\[ LS_{klmn} = S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} } \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vectors
ffunction
d_fdirective of function
dd_fsecond directive of function
t_SS tensor
nbnumber of nonzero eigen values
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 161 of file MatrixFunction.cpp.

164  {
165  return getDiffDiffMatImpl<FTensor::PackPtr<double *, 1>,
167  t_val, t_vec, f, d_f, dd_f, t_S, nb);
168 }

◆ getDiffDiffMatSpecial() [6/10]

FTensor::Ddg< double, 2, 2 > EigenMatrix::getDiffDiffMatSpecial ( Val< FTensor::PackPtr< double *, 1 >, 2 > &  t_val,
Vec< FTensor::PackPtr< double *, 1 >, 2 > &  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
FTensor::Tensor2_symmetric< double, 2 > &  t_S,
const int  nb 
)

Get the Diff Diff Mat object.

\[ LS_{klmn} = S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} } \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vectors
ffunction
d_fdirective of function
dd_fsecond directive of function
t_SS tensor
nbnumber of nonzero eigen values
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 171 of file MatrixFunction.cpp.

175  {
176  return getDiffDiffMatImpl<FTensor::PackPtr<double *, 1>,
178  t_val, t_vec, f, d_f, dd_f, t_S, nb);
179 }

◆ getDiffDiffMatSpecial() [7/10]

FTensor::Ddg< double, 2, 2 > EigenMatrix::getDiffDiffMatSpecial ( Val< FTensor::PackPtr< double *, 1 >, 2 > &  t_val,
Vec< FTensor::PackPtr< double *, 1 >, 2 > &  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
FTensor::Tensor2_symmetric< FTensor::PackPtr< double *, 1 >, 2 > &  t_S,
const int  nb 
)

Get the Diff Diff Mat object.

\[ LS_{klmn} = S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} } \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vectors
ffunction
d_fdirective of function
dd_fsecond directive of function
t_SS tensor
nbnumber of nonzero eigen values
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 181 of file MatrixFunction.cpp.

186  {
187  return getDiffDiffMatImpl<
190  t_val, t_vec, f, d_f, dd_f, t_S, nb);
191 }

◆ getDiffDiffMatSpecial() [8/10]

FTensor::Ddg< double, 3, 3 > EigenMatrix::getDiffDiffMatSpecial ( Val< FTensor::PackPtr< double *, 1 >, 3 > &  t_val,
Vec< FTensor::PackPtr< double *, 1 >, 3 > &  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
FTensor::Tensor2< double, 3, 3 > &  t_S,
const int  nb 
)

Get the Diff Diff Mat object.

\[ LS_{klmn} = S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} } \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vectors
ffunction
d_fdirective of function
dd_fsecond directive of function
t_SS tensor
nbnumber of nonzero eigen values
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 88 of file MatrixFunction.cpp.

91  {
92  return getDiffDiffMatImpl<FTensor::PackPtr<double *, 1>,
94  t_val, t_vec, f, d_f, dd_f, t_S, nb);
95 }

◆ getDiffDiffMatSpecial() [9/10]

FTensor::Ddg< double, 3, 3 > EigenMatrix::getDiffDiffMatSpecial ( Val< FTensor::PackPtr< double *, 1 >, 3 > &  t_val,
Vec< FTensor::PackPtr< double *, 1 >, 3 > &  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
FTensor::Tensor2_symmetric< double, 3 > &  t_S,
const int  nb 
)

Get the Diff Diff Mat object.

\[ LS_{klmn} = S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} } \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vectors
ffunction
d_fdirective of function
dd_fsecond directive of function
t_SS tensor
nbnumber of nonzero eigen values
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 107 of file MatrixFunction.cpp.

111  {
112  return getDiffDiffMatImpl<FTensor::PackPtr<double *, 1>,
114  t_val, t_vec, f, d_f, dd_f, t_S, nb);
115 }

◆ getDiffDiffMatSpecial() [10/10]

FTensor::Ddg< double, 3, 3 > EigenMatrix::getDiffDiffMatSpecial ( Val< FTensor::PackPtr< double *, 1 >, 3 > &  t_val,
Vec< FTensor::PackPtr< double *, 1 >, 3 > &  t_vec,
Fun< double f,
Fun< double d_f,
Fun< double dd_f,
FTensor::Tensor2_symmetric< FTensor::PackPtr< double *, 1 >, 3 > &  t_S,
const int  nb 
)

Get the Diff Diff Mat object.

\[ LS_{klmn} = S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} } \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vectors
ffunction
d_fdirective of function
dd_fsecond directive of function
t_SS tensor
nbnumber of nonzero eigen values
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 193 of file MatrixFunction.cpp.

198  {
199  return getDiffDiffMatImpl<
202  t_val, t_vec, f, d_f, dd_f, t_S, nb);
203 }

◆ getDiffMat()

template<typename A , typename B >
auto EigenMatrix::getDiffMat ( A &&  t_val,
B &&  t_vec,
Fun< double f,
Fun< double d_f,
const int  nb 
)
inline

Get the Diff Mat object.

\[ P_{ijkl} = \frac{\partial B_{ij}}{\partial A_{kl}} \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vector
ffunction
d_fdirective of function
nbnumber of nonequal eigen valuse
Returns
FTensor::Ddg<double, 3, 3>
Examples
EshelbianOperators.cpp, HenckyOps.hpp, and matrix_function.cpp.

Definition at line 166 of file MatrixFunction.hpp.

167  {
168  return getDiffMatSpecial(std::forward<A>(t_val), std::forward<B>(t_vec), f,
169  d_f, nb);
170 }

◆ getDiffMatImpl()

template<typename T , int Dim>
FTensor::Ddg<double, Dim, Dim> EigenMatrix::getDiffMatImpl ( Val< T, Dim > &  t_val,
Vec< T, Dim > &  t_vec,
Fun< double f,
Fun< double d_f,
const int  nb 
)

Definition at line 17 of file MatrixFunction.cpp.

19  {
20  switch (nb) {
21  case 1:
22  return EigenMatrixImp<T, T, 1, Dim>(t_val, t_vec).getDiffMat(f, d_f);
23  case 2:
24  return EigenMatrixImp<T, T, 2, Dim>(t_val, t_vec).getDiffMat(f, d_f);
25  case 3:
26  break;
27  default:
28  THROW_MESSAGE("third parameter should be 1,2 or 3");
29  }
30  return EigenMatrixImp<T, T, 3, Dim>(t_val, t_vec).getDiffMat(f, d_f);
31 };

◆ getDiffMatSpecial() [1/4]

FTensor::Ddg< double, 2, 2 > EigenMatrix::getDiffMatSpecial ( Val< double, 2 > &  t_val,
Vec< double, 2 > &  t_vec,
Fun< double f,
Fun< double d_f,
const int  nb 
)

Get the Diff Mat object.

\[ P_{ijkl} = \frac{\partial B_{ij}}{\partial A_{kl}} \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vector
ffunction
d_fdirective of function
nbnumber of nonequal eigen valuse
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 128 of file MatrixFunction.cpp.

131  {
132  return getDiffMatImpl<double, 2>(t_val, t_vec, f, d_f, nb);
133 }

◆ getDiffMatSpecial() [2/4]

FTensor::Ddg< double, 3, 3 > EigenMatrix::getDiffMatSpecial ( Val< double, 3 > &  t_val,
Vec< double, 3 > &  t_vec,
Fun< double f,
Fun< double d_f,
const int  nb 
)

Get the Diff Mat object.

\[ P_{ijkl} = \frac{\partial B_{ij}}{\partial A_{kl}} \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vector
ffunction
d_fdirective of function
nbnumber of nonequal eigen valuse
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 64 of file MatrixFunction.cpp.

67  {
68  return getDiffMatImpl<double, 3>(t_val, t_vec, f, d_f, nb);
69 }

◆ getDiffMatSpecial() [3/4]

FTensor::Ddg< double, 2, 2 > EigenMatrix::getDiffMatSpecial ( Val< FTensor::PackPtr< double *, 1 >, 2 > &  t_val,
Vec< FTensor::PackPtr< double *, 1 >, 2 > &  t_vec,
Fun< double f,
Fun< double d_f,
const int  nb 
)

Get the Diff Mat object.

\[ P_{ijkl} = \frac{\partial B_{ij}}{\partial A_{kl}} \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vector
ffunction
d_fdirective of function
nbnumber of nonequal eigen valuse
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 136 of file MatrixFunction.cpp.

138  {
139  return getDiffMatImpl<FTensor::PackPtr<double *, 1>, 2>(t_val, t_vec, f, d_f,
140  nb);
141 }

◆ getDiffMatSpecial() [4/4]

FTensor::Ddg< double, 3, 3 > EigenMatrix::getDiffMatSpecial ( Val< FTensor::PackPtr< double *, 1 >, 3 > &  t_val,
Vec< FTensor::PackPtr< double *, 1 >, 3 > &  t_vec,
Fun< double f,
Fun< double d_f,
const int  nb 
)

Get the Diff Mat object.

\[ P_{ijkl} = \frac{\partial B_{ij}}{\partial A_{kl}} \]

Note
Eigen vector are in rows.
Parameters
t_valeigen values
t_veceigen vector
ffunction
d_fdirective of function
nbnumber of nonequal eigen valuse
Returns
FTensor::Ddg<double, 3, 3>

Definition at line 72 of file MatrixFunction.cpp.

74  {
75  return getDiffMatImpl<FTensor::PackPtr<double *, 1>, 3>(t_val, t_vec, f, d_f,
76  nb);
77 }

◆ getMat()

template<typename A , typename B >
auto EigenMatrix::getMat ( A &&  t_val,
B &&  t_vec,
Fun< double f 
)
inline

Get the Mat object.

\[ \mathbf{B} = f(\mathbf{A}) \]

\[ B_{ij} = \sum_{a}^d f(\lambda^a) n^a_i n^a_j \]

where \(a\) is eigen value number.

Parameters
t_valeigen values
t_veceigen vector
ffunction
Returns
FTensor::Tensor2_symmetric<double, 3>
Examples
EshelbianOperators.cpp, HenckyOps.hpp, and matrix_function.cpp.

Definition at line 114 of file MatrixFunction.hpp.

114  {
115  return getMatSpecial(std::forward<A>(t_val), std::forward<B>(t_vec), f);
116 }

◆ getMatImpl()

template<typename T , int Dim>
FTensor::Tensor2_symmetric<double, Dim> EigenMatrix::getMatImpl ( Val< T, Dim > &  t_val,
Vec< T, Dim > &  t_vec,
Fun< double f 
)

Definition at line 12 of file MatrixFunction.cpp.

12  {
13  return EigenMatrixImp<T, T, 3, Dim>(t_val, t_vec).getMat(f);
14 }

◆ getMatSpecial() [1/4]

FTensor::Tensor2_symmetric< double, 2 > EigenMatrix::getMatSpecial ( Val< double, 2 > &  t_val,
Vec< double, 2 > &  t_vec,
Fun< double f 
)

Get the Mat object.

\[ \mathbf{B} = f(\mathbf{A}) \]

\[ B_{ij} = \sum_{a}^d f(\lambda^a) n^a_i n^a_j \]

where \(a\) is eigen value number.

Parameters
t_valeigen values
t_veceigen vector
ffunction
Returns
FTensor::Tensor2_symmetric<double, 3>

Definition at line 118 of file MatrixFunction.cpp.

118  {
119  return getMatImpl<double, 2>(t_val, t_vec, f);
120 }

◆ getMatSpecial() [2/4]

FTensor::Tensor2_symmetric< double, 3 > EigenMatrix::getMatSpecial ( Val< double, 3 > &  t_val,
Vec< double, 3 > &  t_vec,
Fun< double f 
)

Get the Mat object.

\[ \mathbf{B} = f(\mathbf{A}) \]

\[ B_{ij} = \sum_{a}^d f(\lambda^a) n^a_i n^a_j \]

where \(a\) is eigen value number.

Parameters
t_valeigen values
t_veceigen vector
ffunction
Returns
FTensor::Tensor2_symmetric<double, 3>

Definition at line 54 of file MatrixFunction.cpp.

54  {
55  return getMatImpl<double, 3>(t_val, t_vec, f);
56 }

◆ getMatSpecial() [3/4]

FTensor::Tensor2_symmetric< double, 2 > EigenMatrix::getMatSpecial ( Val< FTensor::PackPtr< double *, 1 >, 2 > &  t_val,
Vec< FTensor::PackPtr< double *, 1 >, 2 > &  t_vec,
Fun< double f 
)

Get the Mat object.

\[ \mathbf{B} = f(\mathbf{A}) \]

\[ B_{ij} = \sum_{a}^d f(\lambda^a) n^a_i n^a_j \]

where \(a\) is eigen value number.

Parameters
t_valeigen values
t_veceigen vector
ffunction
Returns
FTensor::Tensor2_symmetric<double, 3>

Definition at line 123 of file MatrixFunction.cpp.

124  {
125  return getMatImpl<FTensor::PackPtr<double *, 1>, 2>(t_val, t_vec, f);
126 }

◆ getMatSpecial() [4/4]

FTensor::Tensor2_symmetric< double, 3 > EigenMatrix::getMatSpecial ( Val< FTensor::PackPtr< double *, 1 >, 3 > &  t_val,
Vec< FTensor::PackPtr< double *, 1 >, 3 > &  t_vec,
Fun< double f 
)

Get the Mat object.

\[ \mathbf{B} = f(\mathbf{A}) \]

\[ B_{ij} = \sum_{a}^d f(\lambda^a) n^a_i n^a_j \]

where \(a\) is eigen value number.

Parameters
t_valeigen values
t_veceigen vector
ffunction
Returns
FTensor::Tensor2_symmetric<double, 3>

Definition at line 59 of file MatrixFunction.cpp.

60  {
61  return getMatImpl<FTensor::PackPtr<double *, 1>, 3>(t_val, t_vec, f);
62 }
EigenMatrix::getMatSpecial
FTensor::Tensor2_symmetric< double, 3 > getMatSpecial(Val< double, 3 > &t_val, Vec< double, 3 > &t_vec, Fun< double > f)
Get the Mat object.
Definition: MatrixFunction.cpp:54
HenckyOps::d_f
auto d_f
Definition: HenckyOps.hpp:16
FTensor::Tensor2_symmetric
Definition: Tensor2_symmetric_value.hpp:13
THROW_MESSAGE
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
Definition: definitions.h:574
FTensor::Tensor2
Definition: Tensor2_value.hpp:16
EigenMatrix::getDiffDiffMatImpl
FTensor::Ddg< double, Dim, Dim > getDiffDiffMatImpl(Val< T, Dim > &t_val, Vec< T, Dim > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, S &t_S, const int nb)
Definition: MatrixFunction.cpp:35
EigenMatrix::getDiffMatSpecial
FTensor::Ddg< double, 3, 3 > getDiffMatSpecial(Val< double, 3 > &t_val, Vec< double, 3 > &t_vec, Fun< double > f, Fun< double > d_f, const int nb)
Get the Diff Mat object.
Definition: MatrixFunction.cpp:64
FTensor::PackPtr
Definition: FTensor.hpp:54
HenckyOps::dd_f
auto dd_f
Definition: HenckyOps.hpp:17
HenckyOps::f
auto f
Definition: HenckyOps.hpp:15
EigenMatrix::getDiffDiffMatSpecial
FTensor::Ddg< double, 3, 3 > getDiffDiffMatSpecial(Val< double, 3 > &t_val, Vec< double, 3 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2< double, 3, 3 > &t_S, const int nb)
Get the Diff Diff Mat object.
Definition: MatrixFunction.cpp:80