v0.16.3
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential Struct Reference

#include "users_modules/eshelbian_plasticity/src/LogarithmicDirectionalDerivatives.hpp"

Collaboration diagram for EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential:
[legend]

Public Member Functions

 RotationExponential (const Vector &w)
 
Tensor value () const
 
Tensor first (const Vector &a) const
 
Tensor second (const Vector &a, const Vector &b) const
 
Tensor third (const Vector &a, const Vector &b, const Vector &c) const
 
template<int N>
void fill (const Matrix< N > &argument, Matrix< N > &result) const
 

Public Attributes

Vector omega
 
Tensor R
 
FTensor::Tensor3< double, 3, 3, 3 > dR
 
FTensor::Tensor4< double, 3, 3, 3, 3 > ddR
 

Detailed Description

Rotation exp(skew(w)) and its directional derivatives up to third order from LieGroups::SO3 (Lie.hpp): exp, diffExp, diffDiffExp and diffDiffDiffExp contracted with the axial direction vectors. The value and the first two derivative tensors are formed once per base and reused for every direction set.

Definition at line 436 of file LogarithmicDirectionalDerivatives.hpp.

Constructor & Destructor Documentation

◆ RotationExponential()

EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential::RotationExponential ( const Vector &  w)
inlineexplicit

Definition at line 437 of file LogarithmicDirectionalDerivatives.hpp.

437 : omega(w) {
438 FTENSOR_INDEXES(3, i, j, k, l);
439 const double theta = std::sqrt(omega(i) * omega(i));
440 R(i, j) = LieGroups::SO3::exp(omega, theta)(i, j);
441 dR(i, j, k) = LieGroups::SO3::diffExp(omega, theta)(i, j, k);
442 ddR(i, j, k, l) = LieGroups::SO3::diffDiffExp(omega, theta)(i, j, k, l);
443 }
#define FTENSOR_INDEXES(DIM,...)
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
static auto diffDiffExp(A &&t_w_vee, B &&theta)
Definition Lie.hpp:110
static auto diffExp(A &&t_w_vee, B &&theta)
Definition Lie.hpp:105
static auto exp(A &&t_w_vee, B &&theta)
Definition Lie.hpp:69

Member Function Documentation

◆ fill()

template<int N>
void EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential::fill ( const Matrix< N > &  argument,
Matrix< N > &  result 
) const
inline

Fill the jet of exp(skew(w)): block 0 the value and the other blocks the derivatives in the axial vectors of the skew direction blocks of argument. A zero direction block gives zero derivatives.

Definition at line 474 of file LogarithmicDirectionalDerivatives.hpp.

474 {
475 FTENSOR_INDEXES(3, i, j);
476 result.data.fill(0.);
477 result[0](i, j) = R(i, j);
478 std::array<Vector, N> v;
479 std::array<bool, N> active{};
480 for (int d = 0; d != N; ++d) {
481 v[d] = axial(argument[1 << d]);
482 active[d] = v[d](i) * v[d](i) > 0.;
483 if (active[d])
484 result[1 << d](i, j) = first(v[d])(i, j);
485 }
486 for (int d1 = 0; d1 != N; ++d1)
487 for (int d2 = d1 + 1; d2 != N; ++d2)
488 if (active[d1] && active[d2])
489 result[(1 << d1) | (1 << d2)](i, j) = second(v[d1], v[d2])(i, j);
490 if constexpr (N == 3)
491 if (active[0] && active[1] && active[2])
492 result[7](i, j) = third(v[0], v[1], v[2])(i, j);
493 }
bool active
const double v
phase velocity of light in medium (cm/ns)
const int N
Definition speed_test.cpp:3

◆ first()

Tensor EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential::first ( const Vector &  a) const
inline

Definition at line 447 of file LogarithmicDirectionalDerivatives.hpp.

447 {
448 FTENSOR_INDEXES(3, i, j, k);
449 Tensor r;
450 r(i, j) = dR(i, j, k) * a(k);
451 return r;
452 }
constexpr double a
int r
Definition sdf.py:205

◆ second()

Tensor EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential::second ( const Vector &  a,
const Vector &  b 
) const
inline

Definition at line 454 of file LogarithmicDirectionalDerivatives.hpp.

454 {
455 FTENSOR_INDEXES(3, i, j, k, l);
456 Tensor r;
457 r(i, j) = ddR(i, j, k, l) * a(k) * b(l);
458 return r;
459 }

◆ third()

Tensor EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential::third ( const Vector &  a,
const Vector &  b,
const Vector &  c 
) const
inline

Definition at line 461 of file LogarithmicDirectionalDerivatives.hpp.

461 {
462 FTENSOR_INDEXES(3, i, j, k, l);
463 const double theta = std::sqrt(omega(i) * omega(i));
464 const auto dddR = LieGroups::SO3::diffDiffDiffExp(omega, theta, c);
465 Tensor r;
466 r(i, j) = dddR(i, j, k, l) * a(k) * b(l);
467 return r;
468 }
const double c
speed of light (cm/ns)
static auto diffDiffDiffExp(A &&t_w_vee, B &&theta, C &&t_delta_w_vee)
Definition Lie.hpp:117

◆ value()

Tensor EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential::value ( ) const
inline

Definition at line 445 of file LogarithmicDirectionalDerivatives.hpp.

445{ return R; }

Member Data Documentation

◆ ddR

FTensor::Tensor4<double, 3, 3, 3, 3> EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential::ddR

Definition at line 498 of file LogarithmicDirectionalDerivatives.hpp.

◆ dR

FTensor::Tensor3<double, 3, 3, 3> EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential::dR

Definition at line 497 of file LogarithmicDirectionalDerivatives.hpp.

◆ omega

Vector EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential::omega

Definition at line 495 of file LogarithmicDirectionalDerivatives.hpp.

◆ R

Tensor EshelbianPlasticity::LogarithmicDirectionalDerivatives::RotationExponential::R

Definition at line 496 of file LogarithmicDirectionalDerivatives.hpp.


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