https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
RotationTensor Class Reference

This is a RealTensor version of a rotation matrix It is instantiated with the Euler angles, which are measured in degrees. More...

#include <RotationTensor.h>

Inheritance diagram for RotationTensor:
[legend]

Public Types

enum  Axis { XAXIS = 0 , YAXIS , ZAXIS }
 axis for single axis rotation constructor More...
 

Public Member Functions

 RotationTensor (Axis axis, Real angle)
 single axis rotation (in degrees)
 
 RotationTensor (const RealVectorValue &euler_angles)
 fills according to Euler angles (measured in degrees)
 
void update (Axis axis, Real angle)
 reforms the rotation matrix according to axis and angle.
 
void update (const RealVectorValue &euler_angles)
 reforms the rotation matrix according to the Euler angles.
 

Detailed Description

This is a RealTensor version of a rotation matrix It is instantiated with the Euler angles, which are measured in degrees.

R = Z0 *X1 * Z2 where Z0 = anticlockwise rotation about Z axis through euler_angles(0) degrees where X1 = anticlockwise rotation about X axis through euler_angles(1) degress where Z2 = anticlockwise rotation about Z axis through euler_angles(2) degrees or an axis, angle pair where the angle is taken anticlockwise in degrees

Definition at line 30 of file RotationTensor.h.

Member Enumeration Documentation

◆ Axis

axis for single axis rotation constructor

Enumerator
XAXIS 
YAXIS 
ZAXIS 

Definition at line 34 of file RotationTensor.h.

Constructor & Destructor Documentation

◆ RotationTensor() [1/2]

RotationTensor::RotationTensor ( Axis  axis,
Real  angle 
)

single axis rotation (in degrees)

Definition at line 15 of file RotationTensor.C.

15{ update(axis, angle); }
void update(Axis axis, Real angle)
reforms the rotation matrix according to axis and angle.

◆ RotationTensor() [2/2]

RotationTensor::RotationTensor ( const RealVectorValue euler_angles)

fills according to Euler angles (measured in degrees)

Definition at line 17 of file RotationTensor.C.

17{ update(euler_angles); }

Member Function Documentation

◆ update() [1/2]

void RotationTensor::update ( Axis  axis,
Real  angle 
)

reforms the rotation matrix according to axis and angle.

Definition at line 20 of file RotationTensor.C.

21{
22 zero();
23
25 a(axis) = 1.0;
26
27 const Real s = std::sin(angle * libMesh::pi / 180.0);
28 const Real c = std::cos(angle * libMesh::pi / 180.0);
29
30 // assemble row wise
31 _coords[0] = a * RealVectorValue(1.0, -c, -c);
32 _coords[1] = a * RealVectorValue(0.0, 0.0, s);
33 _coords[2] = a * RealVectorValue(0.0, -s, 0.0);
34
35 _coords[3] = a * RealVectorValue(0.0, 0.0, -s);
36 _coords[4] = a * RealVectorValue(-c, 1.0, -c);
37 _coords[5] = a * RealVectorValue(s, 0.0, 0.0);
38
39 _coords[6] = a * RealVectorValue(0.0, s, 0.0);
40 _coords[7] = a * RealVectorValue(-s, 0.0, 0.0);
41 _coords[8] = a * RealVectorValue(-c, -c, 1.0);
42}
const Real pi
const Number zero
VectorValue< Real > RealVectorValue
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

Referenced by ComputeElasticityTensorCP::assignEulerAngles(), RotationTensor(), and RotationTensor().

◆ update() [2/2]

void RotationTensor::update ( const RealVectorValue euler_angles)

reforms the rotation matrix according to the Euler angles.

Definition at line 45 of file RotationTensor.C.

46{
47 const Real phi_1 = euler_angles(0) * (libMesh::pi / 180.0);
48 const Real Phi = euler_angles(1) * (libMesh::pi / 180.0);
49 const Real phi_2 = euler_angles(2) * (libMesh::pi / 180.0);
50
51 const Real c1 = std::cos(phi_1);
52 const Real c2 = std::cos(Phi);
53 const Real c3 = std::cos(phi_2);
54
55 const Real s1 = std::sin(phi_1);
56 const Real s2 = std::sin(Phi);
57 const Real s3 = std::sin(phi_2);
58
59 // doing a Z1, X2, Z3 rotation
60 // RealTensorValue is formed row-wise
61
62 _coords[0] = c1 * c3 - c2 * s1 * s3; // R11
63 _coords[3] = -c1 * s3 - c2 * c3 * s1; // R21
64 _coords[6] = s1 * s2; // R31
65
66 _coords[1] = c3 * s1 + c1 * c2 * s3; // R12
67 _coords[4] = c1 * c2 * c3 - s1 * s3; // R22
68 _coords[7] = -c1 * s2; // R32
69
70 _coords[2] = s2 * s3; // R13
71 _coords[5] = c3 * s2; // R23
72 _coords[8] = c2; // R33
73}

The documentation for this class was generated from the following files: