www.mooseframework.org
ComputeFiniteBeamStrain.C
Go to the documentation of this file.
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 
11 #include "Assembly.h"
12 #include "NonlinearSystem.h"
13 #include "MooseVariable.h"
14 
15 #include "libmesh/quadrature.h"
16 #include "libmesh/utility.h"
17 
18 registerMooseObject("TensorMechanicsApp", ComputeFiniteBeamStrain);
19 
21 
22 InputParameters
24 {
25  InputParameters params = ComputeIncrementalBeamStrain::validParams();
26  params.addClassDescription("Compute a rotation increment for finite rotations of the beam and "
27  "computes the small/large strain increments in the current rotated "
28  "configuration of the beam.");
29  return params;
30 }
31 
32 ComputeFiniteBeamStrain::ComputeFiniteBeamStrain(const InputParameters & parameters)
33  : ComputeIncrementalBeamStrain(parameters),
34  _total_rotation_old(getMaterialPropertyOld<RankTwoTensor>("total_rotation"))
35 {
36 }
37 
38 void
40 {
41  // First - convert the differential beam displacement to the beam configuration at previous time
42  // step
43  const RealVectorValue delta_disp_local(_total_rotation_old[0] * (_disp1 - _disp0));
44 
45  // Second - calculate the incremental rotation matrix using Euler angles
46  const Real intermediate_length_1 =
47  std::sqrt(Utility::pow<2>(_original_length[0] + delta_disp_local(0)) +
48  Utility::pow<2>(delta_disp_local(2)));
49  const Real cos_alpha = (_original_length[0] + delta_disp_local(0)) / intermediate_length_1;
50  const Real sin_alpha = std::sqrt(1.0 - Utility::pow<2>(cos_alpha));
51 
52  const Real intermediate_length_2 =
53  std::sqrt(Utility::pow<2>(intermediate_length_1) + Utility::pow<2>(delta_disp_local(1)));
54  const Real sin_beta = delta_disp_local(1) / intermediate_length_2;
55  const Real cos_beta = std::sqrt(1.0 - Utility::pow<2>(sin_beta));
56 
57  const RealVectorValue rotation_d_1(cos_alpha * cos_beta, sin_beta, sin_alpha * cos_beta);
58  const RealVectorValue rotation_d_2(-cos_alpha * sin_beta, cos_beta, -sin_alpha * sin_beta);
59  const RealVectorValue rotation_d_3(-sin_alpha, 0.0, cos_alpha);
60 
61  const RankTwoTensor rotation_d(rotation_d_1, rotation_d_2, rotation_d_3);
62 
63  // Convert average rotational displacement to the beam configuration at previous time step
64  const RealVectorValue avg_rot_local(_total_rotation_old[0] * (_rot0 + _rot1));
65 
66  const Real gamma_increment =
67  0.5 * (rotation_d_1(0) * avg_rot_local(0) + rotation_d_1(1) * avg_rot_local(1) +
68  rotation_d_1(2) * avg_rot_local(2));
69 
70  RankTwoTensor rotation_a;
71  rotation_a(0, 0) = 1.0;
72  rotation_a(1, 1) = std::cos(gamma_increment);
73  rotation_a(1, 2) = std::sin(gamma_increment);
74  rotation_a(2, 1) = -rotation_a(1, 2);
75  rotation_a(2, 2) = rotation_a(1, 1);
76 
77  // Total rotation matrix from global configuration to beam local config at current time
78  _total_rotation[0] = rotation_a * rotation_d * _total_rotation_old[0];
79 }
ComputeIncrementalBeamStrain::_total_rotation
MaterialProperty< RankTwoTensor > & _total_rotation
Rotational transformation from global coordinate system to beam local configuration at time t.
Definition: ComputeIncrementalBeamStrain.h:88
ComputeIncrementalBeamStrain::_rot0
RealVectorValue _rot0
Definition: ComputeIncrementalBeamStrain.h:154
ComputeFiniteBeamStrain::ComputeFiniteBeamStrain
ComputeFiniteBeamStrain(const InputParameters &parameters)
Definition: ComputeFiniteBeamStrain.C:32
ComputeFiniteBeamStrain::_total_rotation_old
const MaterialProperty< RankTwoTensor > & _total_rotation_old
Rotational transformation from the global to beam local coordinate system at time t.
Definition: ComputeFiniteBeamStrain.h:37
defineLegacyParams
defineLegacyParams(ComputeFiniteBeamStrain)
ComputeFiniteBeamStrain::computeRotation
void computeRotation() override
Computes the rotation matrix at time t. For small rotation scenarios, the rotation matrix at time t i...
Definition: ComputeFiniteBeamStrain.C:39
ComputeFiniteBeamStrain
Definition: ComputeFiniteBeamStrain.h:25
ComputeIncrementalBeamStrain::_disp1
RealVectorValue _disp1
Definition: ComputeIncrementalBeamStrain.h:154
ComputeIncrementalBeamStrain::_rot1
RealVectorValue _rot1
Definition: ComputeIncrementalBeamStrain.h:154
ComputeIncrementalBeamStrain::_disp0
RealVectorValue _disp0
Displacement and rotations at the two nodes of the beam in the global coordinate system.
Definition: ComputeIncrementalBeamStrain.h:154
ComputeFiniteBeamStrain::validParams
static InputParameters validParams()
Definition: ComputeFiniteBeamStrain.C:23
ComputeFiniteBeamStrain.h
ComputeIncrementalBeamStrain
Definition: ComputeIncrementalBeamStrain.h:27
RankTwoTensorTempl
Definition: ACGrGrElasticDrivingForce.h:17
ComputeIncrementalBeamStrain::validParams
static InputParameters validParams()
Definition: ComputeIncrementalBeamStrain.C:25
registerMooseObject
registerMooseObject("TensorMechanicsApp", ComputeFiniteBeamStrain)
ComputeIncrementalBeamStrain::_original_length
MaterialProperty< Real > & _original_length
Initial length of the beam.
Definition: ComputeIncrementalBeamStrain.h:85