occ
Loading...
Searching...
No Matches
occ::mults::rotation_detail Namespace Reference

Functions

double ipow (double x, int n)
 
constexpr double fact (int n)
 
double rotation_kernel (int t, int u, int v, int a, int b, int c, const Mat3 &M)
 Compute the rotation kernel element R_l(tuv, abc; M).
 
double rotation_kernel_derivative (int t, int u, int v, int a, int b, int c, const Mat3 &M, const Mat3 &M1)
 Compute the derivative of the rotation kernel w.r.t.
 
double rotation_kernel_second_derivative (int t, int u, int v, int a, int b, int c, const Mat3 &M, const Mat3 &M1k, const Mat3 &M1l, const Mat3 &M2kl)
 Compute the second derivative of the rotation kernel w.r.t.
 

Function Documentation

◆ fact()

constexpr double occ::mults::rotation_detail::fact ( int  n)
inlineconstexpr

◆ ipow()

double occ::mults::rotation_detail::ipow ( double  x,
int  n 
)
inline

◆ rotation_kernel()

double occ::mults::rotation_detail::rotation_kernel ( int  t,
int  u,
int  v,
int  a,
int  b,
int  c,
const Mat3 M 
)
inline

Compute the rotation kernel element R_l(tuv, abc; M).

For a symmetric rank-l Cartesian tensor, the rotation from body to lab involves summing over all 3x3 transportation matrices p with row sums (t,u,v) and column sums (a,b,c).

K = sum_p [t!/(pxx!pxy!pxz!) * u!/(pyx!pyy!pyz!) * v!/(pzx!pzy!pzz!)]

  • M(0,0)^pxx * M(0,1)^pxy * ... * M(2,2)^pzz

◆ rotation_kernel_derivative()

double occ::mults::rotation_detail::rotation_kernel_derivative ( int  t,
int  u,
int  v,
int  a,
int  b,
int  c,
const Mat3 M,
const Mat3 M1 
)
inline

Compute the derivative of the rotation kernel w.r.t.

angle-axis parameter.

Given M1 = dM/dp_k, uses the product rule: dK/dp_k = sum_p mc * sum_{i,j: p(i,j)>0} [p(i,j) * M(i,j)^(p(i,j)-1) * M1(i,j)

  • product of remaining M factors]

◆ rotation_kernel_second_derivative()

double occ::mults::rotation_detail::rotation_kernel_second_derivative ( int  t,
int  u,
int  v,
int  a,
int  b,
int  c,
const Mat3 M,
const Mat3 M1k,
const Mat3 M1l,
const Mat3 M2kl 
)
inline

Compute the second derivative of the rotation kernel w.r.t.

angle-axis parameters.

Given M1 = dM/dp_k and M2 = dM/dp_l and M12 = d²M/dp_k dp_l, uses the product rule to compute d²K/dp_k dp_l.

The kernel is: K = sum_p mc * prod_{i,j} M(i,j)^p(i,j)

The second derivative involves:

  • Terms where we replace two different M factors with M1 and M2
  • Terms where we replace one M factor with M12