https://mooseframework.inl.gov
Loading...
Searching...
No Matches
RotationTensor.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#include "RotationTensor.h"
11#include "libmesh/libmesh.h"
12
13using namespace libMesh;
14
15RotationTensor::RotationTensor(Axis axis, Real angle) { update(axis, angle); }
16
17RotationTensor::RotationTensor(const RealVectorValue & euler_angles) { update(euler_angles); }
18
19void
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}
43
44void
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}
Axis
axis for single axis rotation constructor
void update(Axis axis, Real angle)
reforms the rotation matrix according to axis and angle.
RotationTensor(Axis axis, Real angle)
single axis rotation (in degrees)
The following methods are specializations for using the Parallel::packed_range_* routines for a vecto...
const Real pi
const Number zero
VectorValue< Real > RealVectorValue
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real