12 #include "NonlinearSystem.h"
13 #include "MooseVariable.h"
15 #include "libmesh/quadrature.h"
16 #include "libmesh/utility.h"
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.");
34 _total_rotation_old(getMaterialPropertyOld<
RankTwoTensor>(
"total_rotation"))
46 const Real intermediate_length_1 =
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));
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));
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);
61 const RankTwoTensor rotation_d(rotation_d_1, rotation_d_2, rotation_d_3);
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));
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);