LCOV - code coverage report
Current view: top level - src/utils - RotationTensor.C (source / functions) Hit Total Coverage
Test: idaholab/moose tensor_mechanics: d6b47a Lines: 36 36 100.0 %
Date: 2024-02-27 11:53:14 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //* This file is part of the MOOSE framework
       2             : //* https://www.mooseframework.org
       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             : 
      13           2 : RotationTensor::RotationTensor(Axis axis, Real angle) { update(axis, angle); }
      14             : 
      15        1705 : RotationTensor::RotationTensor(const RealVectorValue & euler_angles) { update(euler_angles); }
      16             : 
      17             : void
      18           2 : RotationTensor::update(Axis axis, Real angle)
      19             : {
      20             :   zero();
      21             : 
      22             :   RealVectorValue a;
      23           2 :   a(axis) = 1.0;
      24             : 
      25           2 :   const Real s = std::sin(angle * libMesh::pi / 180.0);
      26           2 :   const Real c = std::cos(angle * libMesh::pi / 180.0);
      27             : 
      28             :   // assemble row wise
      29           2 :   _coords[0] = a * RealVectorValue(1.0, -c, -c);
      30           2 :   _coords[1] = a * RealVectorValue(0.0, 0.0, s);
      31           2 :   _coords[2] = a * RealVectorValue(0.0, -s, 0.0);
      32             : 
      33           2 :   _coords[3] = a * RealVectorValue(0.0, 0.0, -s);
      34           2 :   _coords[4] = a * RealVectorValue(-c, 1.0, -c);
      35           2 :   _coords[5] = a * RealVectorValue(s, 0.0, 0.0);
      36             : 
      37           2 :   _coords[6] = a * RealVectorValue(0.0, s, 0.0);
      38           2 :   _coords[7] = a * RealVectorValue(-s, 0.0, 0.0);
      39           2 :   _coords[8] = a * RealVectorValue(-c, -c, 1.0);
      40           2 : }
      41             : 
      42             : void
      43     1064223 : RotationTensor::update(const RealVectorValue & euler_angles)
      44             : {
      45     1064223 :   const Real phi_1 = euler_angles(0) * (libMesh::pi / 180.0);
      46     1064223 :   const Real Phi = euler_angles(1) * (libMesh::pi / 180.0);
      47     1064223 :   const Real phi_2 = euler_angles(2) * (libMesh::pi / 180.0);
      48             : 
      49     1064223 :   const Real c1 = std::cos(phi_1);
      50     1064223 :   const Real c2 = std::cos(Phi);
      51     1064223 :   const Real c3 = std::cos(phi_2);
      52             : 
      53     1064223 :   const Real s1 = std::sin(phi_1);
      54     1064223 :   const Real s2 = std::sin(Phi);
      55     1064223 :   const Real s3 = std::sin(phi_2);
      56             : 
      57             :   // doing a Z1, X2, Z3 rotation
      58             :   // RealTensorValue is formed row-wise
      59             : 
      60     1064223 :   _coords[0] = c1 * c3 - c2 * s1 * s3;  // R11
      61     1064223 :   _coords[3] = -c1 * s3 - c2 * c3 * s1; // R21
      62     1064223 :   _coords[6] = s1 * s2;                 // R31
      63             : 
      64     1064223 :   _coords[1] = c3 * s1 + c1 * c2 * s3; // R12
      65     1064223 :   _coords[4] = c1 * c2 * c3 - s1 * s3; // R22
      66     1064223 :   _coords[7] = -c1 * s2;               // R32
      67             : 
      68     1064223 :   _coords[2] = s2 * s3; // R13
      69     1064223 :   _coords[5] = c3 * s2; // R23
      70     1064223 :   _coords[8] = c2;      // R33
      71     1064223 : }

Generated by: LCOV version 1.14