www.mooseframework.org
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ComputeIncrementalBeamStrain Class Reference

#include <ComputeIncrementalBeamStrain.h>

Inheritance diagram for ComputeIncrementalBeamStrain:
[legend]

Public Member Functions

 ComputeIncrementalBeamStrain (const InputParameters &parameters)
 

Protected Member Functions

virtual void computeProperties () override
 
virtual void initQpStatefulProperties () override
 
void computeQpStrain ()
 Computes the displacement and rotation strain increments. More...
 
void computeStiffnessMatrix ()
 Computes the stiffness matrices. More...
 
virtual void computeRotation ()
 Computes the rotation matrix at time t. For small rotation scenarios, the rotation matrix at time t is same as the intiial rotation matrix. More...
 

Protected Attributes

unsigned int _nrot
 Number of coupled rotational variables. More...
 
unsigned int _ndisp
 Number of coupled displacement variables. More...
 
std::vector< unsigned int > _rot_num
 Variable numbers corresponding to the rotational variables. More...
 
std::vector< unsigned int > _disp_num
 Variable numbers corresponding to the displacement variables. More...
 
const VariableValue & _area
 Coupled variable for the beam cross-sectional area. More...
 
const VariableValue & _Ay
 Coupled variable for the first moment of area in y direction, i.e., integral of y*dA over the cross-section. More...
 
const VariableValue & _Az
 Coupled variable for the first moment of area in z direction, i.e., integral of z*dA over the cross-section. More...
 
const VariableValue & _Iy
 Coupled variable for the second moment of area in y direction, i.e., integral of y^2*dA over the cross-section. More...
 
const VariableValue & _Iz
 Coupled variable for the second moment of area in z direction, i.e., integral of z^2*dA over the cross-section. More...
 
const VariableValue & _Ix
 Coupled variable for the second moment of area in x direction, i.e., integral of (y^2 + z^2)*dA over the cross-section. More...
 
RankTwoTensor _original_local_config
 Rotational transformation from global coordinate system to initial beam local configuration. More...
 
MaterialProperty< Real > & _original_length
 Initial length of the beam. More...
 
MaterialProperty< RankTwoTensor > & _total_rotation
 Rotational transformation from global coordinate system to beam local configuration at time t. More...
 
MaterialProperty< RealVectorValue > & _total_disp_strain
 Current total displacement strain integrated over the cross-section in global coordinate system. More...
 
MaterialProperty< RealVectorValue > & _total_rot_strain
 Current total rotational strain integrated over the cross-section in global coordinate system. More...
 
const MaterialProperty< RealVectorValue > & _total_disp_strain_old
 Old total displacement strain integrated over the cross-section in global coordinate system. More...
 
const MaterialProperty< RealVectorValue > & _total_rot_strain_old
 Old total rotational strain integrated over the cross-section in global coordinate system. More...
 
MaterialProperty< RealVectorValue > & _mech_disp_strain_increment
 Mechanical displacement strain increment (after removal of eigenstrains) integrated over the cross-section. More...
 
MaterialProperty< RealVectorValue > & _mech_rot_strain_increment
 Mechanical rotation strain increment (after removal of eigenstrains) integrated over the cross-section. More...
 
const MaterialProperty< RealVectorValue > & _material_stiffness
 Material stiffness vector that relates displacement strain increments to force increments. More...
 
MaterialProperty< RankTwoTensor > & _K11
 Stiffness matrix between displacement DOFs of same node or across nodes. More...
 
MaterialProperty< RankTwoTensor > & _K21_cross
 Stiffness matrix between displacement DOFs of one node to rotational DOFs of another node. More...
 
MaterialProperty< RankTwoTensor > & _K21
 Stiffness matrix between displacement DOFs and rotation DOFs of the same node. More...
 
MaterialProperty< RankTwoTensor > & _K22
 Stiffness matrix between rotation DOFs of the same node. More...
 
MaterialProperty< RankTwoTensor > & _K22_cross
 Stiffness matrix between rotation DOFs of different nodes. More...
 
const bool _large_strain
 Boolean flag to turn on large strain calculation. More...
 
RealVectorValue _grad_disp_0_local_t
 Gradient of displacement calculated in the beam local configuration at time t. More...
 
RealVectorValue _grad_rot_0_local_t
 Gradient of rotation calculated in the beam local configuration at time t. More...
 
RealVectorValue _avg_rot_local_t
 Average rotation calculated in the beam local configuration at time t. More...
 
std::vector< MaterialPropertyName > _eigenstrain_names
 Vector of beam eigenstrain names. More...
 
std::vector< const MaterialProperty< RealVectorValue > * > _disp_eigenstrain
 Vector of current displacement eigenstrains. More...
 
std::vector< const MaterialProperty< RealVectorValue > * > _rot_eigenstrain
 Vector of current rotational eigenstrains. More...
 
std::vector< const MaterialProperty< RealVectorValue > * > _disp_eigenstrain_old
 Vector of old displacement eigenstrains. More...
 
std::vector< const MaterialProperty< RealVectorValue > * > _rot_eigenstrain_old
 Vector of old rotational eigenstrains. More...
 
RealVectorValue _disp0
 Displacement and rotations at the two nodes of the beam in the global coordinate system. More...
 
RealVectorValue _disp1
 
RealVectorValue _rot0
 
RealVectorValue _rot1
 
NonlinearSystemBase & _nonlinear_sys
 Reference to the nonlinear system object. More...
 
std::vector< unsigned int > _soln_disp_index_0
 Indices of solution vector corresponding to displacement DOFs at the node 0. More...
 
std::vector< unsigned int > _soln_disp_index_1
 Indices of solution vector corresponding to displacement DOFs at the node 1. More...
 
std::vector< unsigned int > _soln_rot_index_0
 Indices of solution vector corresponding to rotation DOFs at the node 0. More...
 
std::vector< unsigned int > _soln_rot_index_1
 Indices of solution vector corresponding to rotation DOFs at the node 1. More...
 
MaterialProperty< RankTwoTensor > & _initial_rotation
 Rotational transformation from global coordinate system to initial beam local configuration. More...
 

Detailed Description

Definition at line 23 of file ComputeIncrementalBeamStrain.h.

Constructor & Destructor Documentation

◆ ComputeIncrementalBeamStrain()

ComputeIncrementalBeamStrain::ComputeIncrementalBeamStrain ( const InputParameters &  parameters)

Definition at line 60 of file ComputeIncrementalBeamStrain.C.

61  : Material(parameters),
62  _nrot(coupledComponents("rotations")),
63  _ndisp(coupledComponents("displacements")),
64  _rot_num(_nrot),
66  _area(coupledValue("area")),
67  _Ay(coupledValue("Ay")),
68  _Az(coupledValue("Az")),
69  _Iy(coupledValue("Iy")),
70  _Iz(coupledValue("Iz")),
71  _Ix(isParamValid("Ix") ? coupledValue("Ix") : _zero),
72  _original_length(declareProperty<Real>("original_length")),
73  _total_rotation(declareProperty<RankTwoTensor>("total_rotation")),
74  _total_disp_strain(declareProperty<RealVectorValue>("total_disp_strain")),
75  _total_rot_strain(declareProperty<RealVectorValue>("total_rot_strain")),
76  _total_disp_strain_old(getMaterialPropertyOld<RealVectorValue>("total_disp_strain")),
77  _total_rot_strain_old(getMaterialPropertyOld<RealVectorValue>("total_rot_strain")),
78  _mech_disp_strain_increment(declareProperty<RealVectorValue>("mech_disp_strain_increment")),
79  _mech_rot_strain_increment(declareProperty<RealVectorValue>("mech_rot_strain_increment")),
80  _material_stiffness(getMaterialPropertyByName<RealVectorValue>("material_stiffness")),
81  _K11(declareProperty<RankTwoTensor>("Jacobian_11")),
82  _K21_cross(declareProperty<RankTwoTensor>("Jacobian_12")),
83  _K21(declareProperty<RankTwoTensor>("Jacobian_21")),
84  _K22(declareProperty<RankTwoTensor>("Jacobian_22")),
85  _K22_cross(declareProperty<RankTwoTensor>("Jacobian_22_cross")),
86  _large_strain(getParam<bool>("large_strain")),
87  _eigenstrain_names(getParam<std::vector<MaterialPropertyName>>("eigenstrain_names")),
92  _nonlinear_sys(_fe_problem.getNonlinearSystemBase()),
97  _initial_rotation(declareProperty<RankTwoTensor>("initial_rotation"))
98 {
99  // Checking for consistency between length of the provided displacements and rotations vector
100  if (_ndisp != _nrot)
101  mooseError("ComputeIncrementalBeamStrain: The number of variables supplied in 'displacements' "
102  "and 'rotations' must match.");
103 
104  // fetch coupled variables and gradients (as stateful properties if necessary)
105  for (unsigned int i = 0; i < _ndisp; ++i)
106  {
107  MooseVariable * disp_variable = getVar("displacements", i);
108  _disp_num[i] = disp_variable->number();
109 
110  MooseVariable * rot_variable = getVar("rotations", i);
111  _rot_num[i] = rot_variable->number();
112  }
113 
114  if (_large_strain && (_Ay[0] > 0.0 || _Ay[1] > 0.0 || _Az[0] > 0.0 || _Az[1] > 0.0))
115  mooseError("ComputeIncrementalBeamStrain: Large strain calculation does not currently "
116  "support asymmetric beam configurations with non-zero first or third moments of "
117  "area.");
118 
119  for (unsigned int i = 0; i < _eigenstrain_names.size(); ++i)
120  {
121  _disp_eigenstrain[i] = &getMaterialProperty<RealVectorValue>("disp_" + _eigenstrain_names[i]);
122  _rot_eigenstrain[i] = &getMaterialProperty<RealVectorValue>("rot_" + _eigenstrain_names[i]);
124  &getMaterialPropertyOld<RealVectorValue>("disp_" + _eigenstrain_names[i]);
126  &getMaterialPropertyOld<RealVectorValue>("rot_" + _eigenstrain_names[i]);
127  }
128 }
MaterialProperty< RealVectorValue > & _total_disp_strain
Current total displacement strain integrated over the cross-section in global coordinate system...
std::vector< const MaterialProperty< RealVectorValue > * > _rot_eigenstrain_old
Vector of old rotational eigenstrains.
const VariableValue & _Iy
Coupled variable for the second moment of area in y direction, i.e., integral of y^2*dA over the cros...
std::vector< unsigned int > _soln_disp_index_1
Indices of solution vector corresponding to displacement DOFs at the node 1.
std::vector< unsigned int > _rot_num
Variable numbers corresponding to the rotational variables.
MaterialProperty< RankTwoTensor > & _initial_rotation
Rotational transformation from global coordinate system to initial beam local configuration.
std::vector< unsigned int > _soln_rot_index_0
Indices of solution vector corresponding to rotation DOFs at the node 0.
MaterialProperty< RankTwoTensor > & _K21_cross
Stiffness matrix between displacement DOFs of one node to rotational DOFs of another node...
const VariableValue & _Iz
Coupled variable for the second moment of area in z direction, i.e., integral of z^2*dA over the cros...
unsigned int _ndisp
Number of coupled displacement variables.
MaterialProperty< RankTwoTensor > & _K22
Stiffness matrix between rotation DOFs of the same node.
MaterialProperty< RealVectorValue > & _total_rot_strain
Current total rotational strain integrated over the cross-section in global coordinate system...
NonlinearSystemBase & _nonlinear_sys
Reference to the nonlinear system object.
std::vector< const MaterialProperty< RealVectorValue > * > _disp_eigenstrain_old
Vector of old displacement eigenstrains.
unsigned int _nrot
Number of coupled rotational variables.
MaterialProperty< RankTwoTensor > & _K11
Stiffness matrix between displacement DOFs of same node or across nodes.
std::vector< unsigned int > _disp_num
Variable numbers corresponding to the displacement variables.
MaterialProperty< RankTwoTensor > & _K22_cross
Stiffness matrix between rotation DOFs of different nodes.
MaterialProperty< Real > & _original_length
Initial length of the beam.
MaterialProperty< RealVectorValue > & _mech_rot_strain_increment
Mechanical rotation strain increment (after removal of eigenstrains) integrated over the cross-sectio...
std::vector< const MaterialProperty< RealVectorValue > * > _disp_eigenstrain
Vector of current displacement eigenstrains.
std::vector< unsigned int > _soln_rot_index_1
Indices of solution vector corresponding to rotation DOFs at the node 1.
MaterialProperty< RealVectorValue > & _mech_disp_strain_increment
Mechanical displacement strain increment (after removal of eigenstrains) integrated over the cross-se...
const MaterialProperty< RealVectorValue > & _material_stiffness
Material stiffness vector that relates displacement strain increments to force increments.
const VariableValue & _area
Coupled variable for the beam cross-sectional area.
std::vector< MaterialPropertyName > _eigenstrain_names
Vector of beam eigenstrain names.
const bool _large_strain
Boolean flag to turn on large strain calculation.
const VariableValue & _Ay
Coupled variable for the first moment of area in y direction, i.e., integral of y*dA over the cross-s...
const MaterialProperty< RealVectorValue > & _total_rot_strain_old
Old total rotational strain integrated over the cross-section in global coordinate system...
std::vector< const MaterialProperty< RealVectorValue > * > _rot_eigenstrain
Vector of current rotational eigenstrains.
const VariableValue & _Az
Coupled variable for the first moment of area in z direction, i.e., integral of z*dA over the cross-s...
const VariableValue & _Ix
Coupled variable for the second moment of area in x direction, i.e., integral of (y^2 + z^2)*dA over ...
std::vector< unsigned int > _soln_disp_index_0
Indices of solution vector corresponding to displacement DOFs at the node 0.
MaterialProperty< RankTwoTensor > & _total_rotation
Rotational transformation from global coordinate system to beam local configuration at time t...
MaterialProperty< RankTwoTensor > & _K21
Stiffness matrix between displacement DOFs and rotation DOFs of the same node.
const MaterialProperty< RealVectorValue > & _total_disp_strain_old
Old total displacement strain integrated over the cross-section in global coordinate system...

Member Function Documentation

◆ computeProperties()

void ComputeIncrementalBeamStrain::computeProperties ( )
overrideprotectedvirtual

Definition at line 173 of file ComputeIncrementalBeamStrain.C.

174 {
175  // fetch the two end nodes for current element
176  std::vector<Node *> node;
177  for (unsigned int i = 0; i < 2; ++i)
178  node.push_back(_current_elem->get_node(i));
179 
180  // calculate original length of a beam element
181  // Nodal positions do not change with time as undisplaced mesh is used by material classes by
182  // default
183  RealGradient dxyz;
184  for (unsigned int i = 0; i < _ndisp; ++i)
185  dxyz(i) = (*node[1])(i) - (*node[0])(i);
186 
187  _original_length[0] = dxyz.norm();
188 
189  // Fetch the solution for the two end nodes at time t
190  const NumericVector<Number> & sol = *_nonlinear_sys.currentSolution();
191  const NumericVector<Number> & sol_old = _nonlinear_sys.solutionOld();
192 
193  for (unsigned int i = 0; i < _ndisp; ++i)
194  {
195  _soln_disp_index_0[i] = node[0]->dof_number(_nonlinear_sys.number(), _disp_num[i], 0);
196  _soln_disp_index_1[i] = node[1]->dof_number(_nonlinear_sys.number(), _disp_num[i], 0);
197  _soln_rot_index_0[i] = node[0]->dof_number(_nonlinear_sys.number(), _rot_num[i], 0);
198  _soln_rot_index_1[i] = node[1]->dof_number(_nonlinear_sys.number(), _rot_num[i], 0);
199 
200  _disp0(i) = sol(_soln_disp_index_0[i]) - sol_old(_soln_disp_index_0[i]);
201  _disp1(i) = sol(_soln_disp_index_1[i]) - sol_old(_soln_disp_index_1[i]);
202  _rot0(i) = sol(_soln_rot_index_0[i]) - sol_old(_soln_rot_index_0[i]);
203  _rot1(i) = sol(_soln_rot_index_1[i]) - sol_old(_soln_rot_index_1[i]);
204  }
205 
206  // For small rotation problems, the rotation matrix is essentially the transformation from the
207  // global to original beam local configuration and is never updated. This method has to be
208  // overriden for scenarios with finite rotation
209  computeRotation();
211 
212  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
213  computeQpStrain();
214 
215  if (_fe_problem.currentlyComputingJacobian())
217 }
std::vector< unsigned int > _soln_disp_index_1
Indices of solution vector corresponding to displacement DOFs at the node 1.
std::vector< unsigned int > _rot_num
Variable numbers corresponding to the rotational variables.
MaterialProperty< RankTwoTensor > & _initial_rotation
Rotational transformation from global coordinate system to initial beam local configuration.
std::vector< unsigned int > _soln_rot_index_0
Indices of solution vector corresponding to rotation DOFs at the node 0.
unsigned int _ndisp
Number of coupled displacement variables.
virtual void computeRotation()
Computes the rotation matrix at time t. For small rotation scenarios, the rotation matrix at time t i...
RankTwoTensor _original_local_config
Rotational transformation from global coordinate system to initial beam local configuration.
NonlinearSystemBase & _nonlinear_sys
Reference to the nonlinear system object.
std::vector< unsigned int > _disp_num
Variable numbers corresponding to the displacement variables.
MaterialProperty< Real > & _original_length
Initial length of the beam.
std::vector< unsigned int > _soln_rot_index_1
Indices of solution vector corresponding to rotation DOFs at the node 1.
void computeQpStrain()
Computes the displacement and rotation strain increments.
RealVectorValue _disp0
Displacement and rotations at the two nodes of the beam in the global coordinate system.
void computeStiffnessMatrix()
Computes the stiffness matrices.
std::vector< unsigned int > _soln_disp_index_0
Indices of solution vector corresponding to displacement DOFs at the node 0.

◆ computeQpStrain()

void ComputeIncrementalBeamStrain::computeQpStrain ( )
protected

Computes the displacement and rotation strain increments.

Definition at line 220 of file ComputeIncrementalBeamStrain.C.

Referenced by computeProperties().

221 {
222  Real Ix = _Ix[_qp];
223  if (!isParamValid("Ix"))
224  Ix = _Iy[_qp] + _Iz[_qp];
225 
226  // Rotate the gradient of displacements and rotations at t+delta t from global coordinate
227  // frame to beam local coordinate frame
228  const RealVectorValue grad_disp_0(1.0 / _original_length[0] * (_disp1 - _disp0));
229  const RealVectorValue grad_rot_0(1.0 / _original_length[0] * (_rot1 - _rot0));
230  const RealVectorValue avg_rot(
231  0.5 * (_rot0(0) + _rot1(0)), 0.5 * (_rot0(1) + _rot1(1)), 0.5 * (_rot0(2) + _rot1(2)));
232 
233  _grad_disp_0_local_t = _total_rotation[0] * grad_disp_0;
234  _grad_rot_0_local_t = _total_rotation[0] * grad_rot_0;
235  _avg_rot_local_t = _total_rotation[0] * avg_rot;
236 
237  // displacement at any location on beam in local coordinate system at t
238  // u_1 = u_n1 - rot_3 * y + rot_2 * z
239  // u_2 = u_n2 - rot_1 * z
240  // u_3 = u_n3 + rot_1 * y
241  // where u_n1, u_n2, u_n3 are displacements at neutral axis
242 
243  // small strain
244  // e_11 = u_1,1 = u_n1, 1 - rot_3, 1 * y + rot_2, 1 * z
245  // e_12 = 2 * 0.5 * (u_1,2 + u_2,1) = (- rot_3 + u_n2,1 - rot_1,1 * z)
246  // e_13 = 2 * 0.5 * (u_1,3 + u_3,1) = (rot_2 + u_n3,1 + rot_1,1 * y)
247 
248  // axial and shearing strains at each qp along the length of the beam
250  _grad_rot_0_local_t(2) * _Ay[_qp] +
251  _grad_rot_0_local_t(1) * _Az[_qp];
252  _mech_disp_strain_increment[_qp](1) = -_avg_rot_local_t(2) * _area[_qp] +
253  _grad_disp_0_local_t(1) * _area[_qp] -
254  _grad_rot_0_local_t(0) * _Az[_qp];
256  _grad_disp_0_local_t(2) * _area[_qp] +
257  _grad_rot_0_local_t(0) * _Ay[_qp];
258 
259  // rotational strains at each qp along the length of the beam
260  // rot_strain_1 = integral(e_13 * y - e_12 * z) dA
261  // rot_strain_2 = integral(e_11 * z) dA
262  // rot_strain_3 = integral(e_11 * y) dA
263  // Iyz is the product moment of inertia which is zero for most cross-sections so it is assumed to
264  // be zero for this analysis
265  const Real Iyz = 0;
267  _avg_rot_local_t(1) * _Ay[_qp] + _grad_disp_0_local_t(2) * _Ay[_qp] +
268  _grad_rot_0_local_t(0) * Ix + _avg_rot_local_t(2) * _Az[_qp] -
269  _grad_disp_0_local_t(1) * _Az[_qp];
271  _grad_rot_0_local_t(2) * Iyz +
272  _grad_rot_0_local_t(1) * _Iz[_qp];
274  _grad_rot_0_local_t(2) * _Iy[_qp] +
275  _grad_rot_0_local_t(1) * Iyz;
276 
277  if (_large_strain)
278  {
279  _mech_disp_strain_increment[_qp](0) +=
280  0.5 *
281  ((Utility::pow<2>(_grad_disp_0_local_t(0)) + Utility::pow<2>(_grad_disp_0_local_t(1)) +
282  Utility::pow<2>(_grad_disp_0_local_t(2))) *
283  _area[_qp] +
284  Utility::pow<2>(_grad_rot_0_local_t(2)) * _Iy[_qp] +
285  Utility::pow<2>(_grad_rot_0_local_t(1)) * _Iz[_qp] +
286  Utility::pow<2>(_grad_rot_0_local_t(0)) * Ix);
289  _area[_qp];
292  _area[_qp];
293 
298  _Iz[_qp];
301  _Iy[_qp];
302  }
303 
304  _total_disp_strain[_qp] = _total_rotation[0].transpose() * _mech_disp_strain_increment[_qp] +
306  _total_rot_strain[_qp] = _total_rotation[0].transpose() * _mech_rot_strain_increment[_qp] +
308 
309  // Convert eigenstrain increment from global to beam local coordinate system and remove eigen
310  // strain increment
311  for (unsigned int i = 0; i < _eigenstrain_names.size(); ++i)
312  {
314  _total_rotation[0] * ((*_disp_eigenstrain[i])[_qp] - (*_disp_eigenstrain_old[i])[_qp]) *
315  _area[_qp];
317  _total_rotation[0] * ((*_rot_eigenstrain[i])[_qp] - (*_rot_eigenstrain_old[i])[_qp]);
318  }
319 }
MaterialProperty< RealVectorValue > & _total_disp_strain
Current total displacement strain integrated over the cross-section in global coordinate system...
std::vector< const MaterialProperty< RealVectorValue > * > _rot_eigenstrain_old
Vector of old rotational eigenstrains.
const VariableValue & _Iy
Coupled variable for the second moment of area in y direction, i.e., integral of y^2*dA over the cros...
const VariableValue & _Iz
Coupled variable for the second moment of area in z direction, i.e., integral of z^2*dA over the cros...
MaterialProperty< RealVectorValue > & _total_rot_strain
Current total rotational strain integrated over the cross-section in global coordinate system...
std::vector< const MaterialProperty< RealVectorValue > * > _disp_eigenstrain_old
Vector of old displacement eigenstrains.
RealVectorValue _avg_rot_local_t
Average rotation calculated in the beam local configuration at time t.
MaterialProperty< Real > & _original_length
Initial length of the beam.
MaterialProperty< RealVectorValue > & _mech_rot_strain_increment
Mechanical rotation strain increment (after removal of eigenstrains) integrated over the cross-sectio...
std::vector< const MaterialProperty< RealVectorValue > * > _disp_eigenstrain
Vector of current displacement eigenstrains.
MaterialProperty< RealVectorValue > & _mech_disp_strain_increment
Mechanical displacement strain increment (after removal of eigenstrains) integrated over the cross-se...
RealVectorValue _grad_rot_0_local_t
Gradient of rotation calculated in the beam local configuration at time t.
const VariableValue & _area
Coupled variable for the beam cross-sectional area.
RealVectorValue _disp0
Displacement and rotations at the two nodes of the beam in the global coordinate system.
std::vector< MaterialPropertyName > _eigenstrain_names
Vector of beam eigenstrain names.
const bool _large_strain
Boolean flag to turn on large strain calculation.
const VariableValue & _Ay
Coupled variable for the first moment of area in y direction, i.e., integral of y*dA over the cross-s...
std::vector< const MaterialProperty< RealVectorValue > * > _rot_eigenstrain
Vector of current rotational eigenstrains.
const VariableValue & _Az
Coupled variable for the first moment of area in z direction, i.e., integral of z*dA over the cross-s...
const VariableValue & _Ix
Coupled variable for the second moment of area in x direction, i.e., integral of (y^2 + z^2)*dA over ...
MaterialProperty< RankTwoTensor > & _total_rotation
Rotational transformation from global coordinate system to beam local configuration at time t...
const MaterialProperty< RealVectorValue > & _total_disp_strain_old
Old total displacement strain integrated over the cross-section in global coordinate system...
RealVectorValue _grad_disp_0_local_t
Gradient of displacement calculated in the beam local configuration at time t.

◆ computeRotation()

void ComputeIncrementalBeamStrain::computeRotation ( )
protectedvirtual

Computes the rotation matrix at time t. For small rotation scenarios, the rotation matrix at time t is same as the intiial rotation matrix.

Reimplemented in ComputeFiniteBeamStrain.

Definition at line 591 of file ComputeIncrementalBeamStrain.C.

Referenced by computeProperties().

592 {
594 }
RankTwoTensor _original_local_config
Rotational transformation from global coordinate system to initial beam local configuration.
MaterialProperty< RankTwoTensor > & _total_rotation
Rotational transformation from global coordinate system to beam local configuration at time t...

◆ computeStiffnessMatrix()

void ComputeIncrementalBeamStrain::computeStiffnessMatrix ( )
protected

Computes the stiffness matrices.

Definition at line 322 of file ComputeIncrementalBeamStrain.C.

Referenced by computeProperties().

323 {
324  const Real youngs_modulus = _material_stiffness[0](0);
325  const Real shear_modulus = _material_stiffness[0](1);
326 
327  const Real A_avg = (_area[0] + _area[1]) / 2.0;
328  const Real Iy_avg = (_Iy[0] + _Iy[1]) / 2.0;
329  const Real Iz_avg = (_Iz[0] + _Iz[1]) / 2.0;
330  Real Ix_avg = (_Ix[0] + _Ix[1]) / 2.0;
331  if (!isParamValid("Ix"))
332  Ix_avg = Iy_avg + Iz_avg;
333 
334  // K = |K11 K12|
335  // |K21 K22|
336 
337  // relation between translational displacements at node 0 and translational forces at node 0
338  RankTwoTensor K11_local;
339  K11_local.zero();
340  K11_local(0, 0) = youngs_modulus * A_avg / _original_length[0];
341  K11_local(1, 1) = shear_modulus * A_avg / _original_length[0];
342  K11_local(2, 2) = shear_modulus * A_avg / _original_length[0];
343  _K11[0] = _total_rotation[0].transpose() * K11_local * _total_rotation[0];
344 
345  // relation between displacements at node 0 and rotational moments at node 0
346  RankTwoTensor K21_local;
347  K21_local.zero();
348  K21_local(2, 1) = shear_modulus * A_avg * 0.5;
349  K21_local(1, 2) = -shear_modulus * A_avg * 0.5;
350  _K21[0] = _total_rotation[0].transpose() * K21_local * _total_rotation[0];
351 
352  // relation between rotations at node 0 and rotational moments at node 0
353  RankTwoTensor K22_local;
354  K22_local.zero();
355  K22_local(0, 0) = shear_modulus * Ix_avg / _original_length[0];
356  K22_local(1, 1) = youngs_modulus * Iz_avg / _original_length[0] +
357  shear_modulus * A_avg * _original_length[0] / 4.0;
358  K22_local(2, 2) = youngs_modulus * Iy_avg / _original_length[0] +
359  shear_modulus * A_avg * _original_length[0] / 4.0;
360  _K22[0] = _total_rotation[0].transpose() * K22_local * _total_rotation[0];
361 
362  // relation between rotations at node 0 and rotational moments at node 1
363  RankTwoTensor K22_local_cross = -K22_local;
364  K22_local_cross(1, 1) += 2.0 * shear_modulus * A_avg * _original_length[0] / 4.0;
365  K22_local_cross(2, 2) += 2.0 * shear_modulus * A_avg * _original_length[0] / 4.0;
366  _K22_cross[0] = _total_rotation[0].transpose() * K22_local_cross * _total_rotation[0];
367 
368  // relation between displacements at node 0 and rotational moments at node 1
369  _K21_cross[0] = -_K21[0];
370 
371  // stiffness matrix for large strain
372  if (_large_strain)
373  {
374  // k1_large is the stiffness matrix obtained from sigma_xx * d(epsilon_xx)
375  RankTwoTensor k1_large_11;
376  // row 1
377  k1_large_11(0, 0) = Utility::pow<2>(_grad_disp_0_local_t(0)) +
378  1.5 * Utility::pow<2>(_grad_rot_0_local_t(2)) * Iy_avg +
379  1.5 * Utility::pow<2>(_grad_rot_0_local_t(1)) * Iz_avg +
380  0.5 * Utility::pow<2>(_grad_disp_0_local_t(1)) +
381  0.5 * Utility::pow<2>(_grad_disp_0_local_t(2)) +
382  0.5 * Utility::pow<2>(_grad_rot_0_local_t(0)) * Ix_avg;
383  k1_large_11(1, 0) = 0.5 * _grad_disp_0_local_t(0) * _grad_disp_0_local_t(1) -
384  1.0 / 3.0 * _grad_rot_0_local_t(0) * _grad_rot_0_local_t(1) * Iz_avg;
385  k1_large_11(2, 0) = 0.5 * _grad_disp_0_local_t(0) * _grad_disp_0_local_t(2) -
386  1.0 / 3.0 * _grad_rot_0_local_t(0) * _grad_rot_0_local_t(2) * Iy_avg;
387 
388  // row 2
389  k1_large_11(0, 1) = k1_large_11(1, 0);
390  k1_large_11(1, 1) = Utility::pow<2>(_grad_disp_0_local_t(1)) +
391  1.5 * Utility::pow<2>(_grad_rot_0_local_t(0)) * Iz_avg +
392  0.5 * Utility::pow<2>(_grad_disp_0_local_t(0)) +
393  0.5 * Utility::pow<2>(_grad_disp_0_local_t(2)) +
394  0.5 * Utility::pow<2>(_grad_rot_0_local_t(2)) * Iy_avg +
395  0.5 * Utility::pow<2>(_grad_rot_0_local_t(1)) * Iz_avg +
396  0.5 * Utility::pow<2>(_grad_rot_0_local_t(0)) * Iy_avg;
397  k1_large_11(2, 1) = 0.5 * _grad_disp_0_local_t(1) * _grad_disp_0_local_t(2);
398 
399  // row 3
400  k1_large_11(0, 2) = k1_large_11(2, 0);
401  k1_large_11(1, 2) = k1_large_11(2, 1);
402  k1_large_11(2, 2) = Utility::pow<2>(_grad_disp_0_local_t(2)) +
403  1.5 * Utility::pow<2>(_grad_rot_0_local_t(0)) * Iy_avg +
404  0.5 * Utility::pow<2>(_grad_disp_0_local_t(0)) +
405  0.5 * Utility::pow<2>(_grad_disp_0_local_t(1)) +
406  0.5 * Utility::pow<2>(_grad_rot_0_local_t(0)) * Iz_avg +
407  0.5 * Utility::pow<2>(_grad_rot_0_local_t(2)) * Iy_avg +
408  0.5 * Utility::pow<2>(_grad_rot_0_local_t(2)) * Iz_avg;
409 
410  k1_large_11 *= 1.0 / 4.0 / Utility::pow<2>(_original_length[0]);
411 
412  RankTwoTensor k1_large_21;
413  // row 1
414  k1_large_21(0, 0) = 0.5 * _grad_disp_0_local_t(0) * _grad_rot_0_local_t(0) * (Ix_avg)-1.0 /
415  3.0 * _grad_disp_0_local_t(1) * _grad_rot_0_local_t(1) * Iz_avg -
416  1.0 / 3.0 * _grad_disp_0_local_t(2) * _grad_rot_0_local_t(2);
417  k1_large_21(1, 0) = 1.5 * _grad_disp_0_local_t(0) * _grad_rot_0_local_t(1) * Iz_avg -
418  1.0 / 3.0 * _grad_disp_0_local_t(1) * _grad_rot_0_local_t(0) * Iz_avg;
419  k1_large_21(2, 0) = 1.5 * _grad_disp_0_local_t(0) * _grad_rot_0_local_t(2) * Iy_avg -
420  1.0 / 3.0 * _grad_disp_0_local_t(2) * _grad_rot_0_local_t(0) * Iy_avg;
421 
422  // row 2
423  k1_large_21(0, 1) = k1_large_21(1, 0);
424  k1_large_21(1, 1) = 0.5 * _grad_disp_0_local_t(1) * _grad_rot_0_local_t(1) * Iz_avg -
425  1.0 / 3.0 * _grad_disp_0_local_t(0) * _grad_rot_0_local_t(0) * Iz_avg;
426  k1_large_21(2, 1) = 0.5 * _grad_disp_0_local_t(1) * _grad_rot_0_local_t(2) * Iy_avg;
427 
428  // row 3
429  k1_large_21(0, 2) = k1_large_21(2, 0);
430  k1_large_21(1, 2) = k1_large_21(2, 1);
431  k1_large_21(2, 2) = 0.5 * _grad_disp_0_local_t(2) * _grad_rot_0_local_t(2) * Iy_avg -
432  1.0 / 3.0 * _grad_disp_0_local_t(0) * _grad_rot_0_local_t(0) * Iy_avg;
433  k1_large_21 *= 1.0 / 4.0 / Utility::pow<2>(_original_length[0]);
434 
435  RankTwoTensor k1_large_22;
436  // row 1
437  k1_large_22(0, 0) = Utility::pow<2>(_grad_rot_0_local_t(0)) * Utility::pow<2>(Ix_avg) +
438  1.5 * Utility::pow<2>(_grad_disp_0_local_t(1)) * Iz_avg +
439  1.5 * Utility::pow<2>(_grad_disp_0_local_t(2)) * Iy_avg +
440  0.5 * Utility::pow<2>(_grad_disp_0_local_t(0)) * Ix_avg +
441  0.5 * Utility::pow<2>(_grad_disp_0_local_t(2)) * Iz_avg +
442  0.5 * Utility::pow<2>(_grad_disp_0_local_t(1)) * Iy_avg +
443  0.5 * Utility::pow<2>(_grad_rot_0_local_t(2)) * Iy_avg * Ix_avg +
444  0.5 * Utility::pow<2>(_grad_rot_0_local_t(1)) * Iz_avg * Ix_avg;
445  k1_large_22(1, 0) = 0.5 * _grad_rot_0_local_t(0) * _grad_rot_0_local_t(1) * Iz_avg * Ix_avg -
446  1.0 / 3.0 * _grad_disp_0_local_t(0) * _grad_disp_0_local_t(1) * Iz_avg;
447  k1_large_22(2, 0) = 0.5 * _grad_rot_0_local_t(0) * _grad_rot_0_local_t(2) * Iy_avg * Ix_avg -
448  1.0 / 3.0 * _grad_disp_0_local_t(0) * _grad_disp_0_local_t(2) * Iy_avg;
449 
450  // row 2
451  k1_large_22(0, 1) = k1_large_22(1, 0);
452  k1_large_22(1, 1) = Utility::pow<2>(_grad_rot_0_local_t(1)) * Iz_avg * Iz_avg +
453  1.5 * Utility::pow<2>(_grad_disp_0_local_t(0)) * Iz_avg +
454  1.5 * Utility::pow<2>(_grad_rot_0_local_t(2)) * Iy_avg * Iz_avg +
455  0.5 * Utility::pow<2>(_grad_disp_0_local_t(1)) * Iz_avg +
456  0.5 * Utility::pow<2>(_grad_disp_0_local_t(2)) * Iz_avg +
457  0.5 * Utility::pow<2>(_grad_rot_0_local_t(0)) * Iz_avg * Ix_avg;
458  k1_large_22(2, 1) = 1.5 * _grad_rot_0_local_t(1) * _grad_rot_0_local_t(2) * Iy_avg * Iz_avg;
459 
460  // row 3
461  k1_large_22(0, 2) = k1_large_22(2, 0);
462  k1_large_22(1, 2) = k1_large_22(2, 1);
463  k1_large_22(2, 2) = Utility::pow<2>(_grad_rot_0_local_t(2)) * Iy_avg * Iy_avg +
464  1.5 * Utility::pow<2>(_grad_disp_0_local_t(0)) * Iy_avg +
465  1.5 * Utility::pow<2>(_grad_rot_0_local_t(1)) * Iy_avg * Iz_avg +
466  0.5 * Utility::pow<2>(_grad_disp_0_local_t(1)) * Iy_avg +
467  0.5 * Utility::pow<2>(_grad_disp_0_local_t(2)) * Iy_avg +
468  0.5 * Utility::pow<2>(_grad_rot_0_local_t(0)) * Iz_avg * Ix_avg;
469 
470  k1_large_22 *= 1.0 / 4.0 / Utility::pow<2>(_original_length[0]);
471 
472  // k2_large and k3_large are contributions from tau_xy * d(gamma_xy) and tau_xz * d(gamma_xz)
473  // k2_large for node 1 is negative of that for node 0
474  RankTwoTensor k2_large_11;
475  // col 1
476  k2_large_11(0, 0) =
477  0.25 * Utility::pow<2>(_avg_rot_local_t(2)) + 0.25 * Utility::pow<2>(_avg_rot_local_t(1));
478  k2_large_11(1, 0) = -1.0 / 6.0 * _avg_rot_local_t(0) * _avg_rot_local_t(1);
479  k2_large_11(2, 0) = -1.0 / 6.0 * _avg_rot_local_t(0) * _avg_rot_local_t(2);
480 
481  // col 2
482  k2_large_11(0, 1) = k2_large_11(1, 0);
483  k2_large_11(1, 1) = 0.25 * _avg_rot_local_t(0);
484 
485  // col 3
486  k2_large_11(0, 2) = k2_large_11(2, 0);
487  k2_large_11(2, 2) = 0.25 * Utility::pow<2>(_avg_rot_local_t(0));
488 
489  k2_large_11 *= 1.0 / 4.0 / Utility::pow<2>(_original_length[0]);
490 
491  RankTwoTensor k2_large_22;
492  // col1
493  k2_large_22(0, 0) = 0.25 * Utility::pow<2>(_avg_rot_local_t(0)) * Ix_avg;
494  k2_large_22(1, 0) = 1.0 / 6.0 * _avg_rot_local_t(0) * _avg_rot_local_t(1) * Iz_avg;
495  k2_large_22(2, 0) = 1.0 / 6.0 * _avg_rot_local_t(0) * _avg_rot_local_t(2) * Iy_avg;
496 
497  // col2
498  k2_large_22(0, 1) = k2_large_22(1, 0);
499  k2_large_22(1, 1) = 0.25 * Utility::pow<2>(_avg_rot_local_t(2)) * Iz_avg +
500  0.25 * Utility::pow<2>(_avg_rot_local_t(1)) * Iz_avg;
501 
502  // col3
503  k2_large_22(0, 2) = k2_large_22(2, 0);
504  k2_large_22(2, 2) = 0.25 * Utility::pow<2>(_avg_rot_local_t(2)) * Iy_avg +
505  0.25 * Utility::pow<2>(_avg_rot_local_t(1)) * Iy_avg;
506 
507  k2_large_22 *= 1.0 / 4.0 / Utility::pow<2>(_original_length[0]);
508 
509  // k3_large for node 1 is same as that for node 0
510  RankTwoTensor k3_large_22;
511  // col1
512  k3_large_22(0, 0) = 0.25 * Utility::pow<2>(_grad_disp_0_local_t(2)) +
513  0.25 * _grad_rot_0_local_t(0) * Ix_avg +
514  0.25 * Utility::pow<2>(_grad_disp_0_local_t(1));
515  k3_large_22(1, 0) = -1.0 / 6.0 * _grad_disp_0_local_t(0) * _grad_disp_0_local_t(1) +
516  1.0 / 6.0 * _grad_rot_0_local_t(0) * _grad_rot_0_local_t(1) * Iz_avg;
517  k3_large_22(2, 0) = -1.0 / 6.0 * _grad_disp_0_local_t(0) * _grad_disp_0_local_t(2) +
518  1.0 / 6.0 * _grad_rot_0_local_t(0) * _grad_rot_0_local_t(2) * Iy_avg;
519 
520  // col2
521  k3_large_22(0, 1) = k3_large_22(1, 0);
522  k3_large_22(2, 2) = 0.25 * Utility::pow<2>(_grad_disp_0_local_t(0)) +
523  0.25 * _grad_rot_0_local_t(2) * Iy_avg +
524  0.25 * _grad_rot_0_local_t(1) * Iz_avg;
525 
526  // col3
527  k3_large_22(0, 2) = k3_large_22(2, 0);
528  k3_large_22(2, 2) = 0.25 * Utility::pow<2>(_grad_disp_0_local_t(0)) +
529  0.25 * _grad_rot_0_local_t(2) * Iy_avg +
530  0.25 * _grad_rot_0_local_t(1) * Iz_avg;
531 
532  k3_large_22 *= 1.0 / 16.0;
533 
534  RankTwoTensor k3_large_21;
535  // col1
536  k3_large_21(0, 0) = -1.0 / 6.0 *
539  k3_large_21(1, 0) = 0.25 * _grad_disp_0_local_t(0) * _avg_rot_local_t(1) -
540  1.0 / 6.0 * _grad_disp_0_local_t(1) * _avg_rot_local_t(0);
541  k3_large_21(2, 0) = 0.25 * _grad_disp_0_local_t(0) * _avg_rot_local_t(2) -
542  1.0 / 6.0 * _grad_disp_0_local_t(2) * _avg_rot_local_t(0);
543 
544  // col2
545  k3_large_21(0, 1) = 0.25 * _grad_disp_0_local_t(1) * _avg_rot_local_t(0) -
546  1.0 / 6.0 * _grad_disp_0_local_t(0) * _avg_rot_local_t(1);
547  k3_large_21(1, 1) = -1.0 / 6.0 * _grad_disp_0_local_t(0) * _avg_rot_local_t(0);
548 
549  // col3
550  k3_large_21(0, 2) = 0.25 * _grad_disp_0_local_t(2) * _avg_rot_local_t(0) -
551  1.0 / 6.0 * _grad_disp_0_local_t(0) * _avg_rot_local_t(2);
552  k3_large_21(2, 2) = -1.0 / 6.0 * _grad_disp_0_local_t(0) * _avg_rot_local_t(0);
553 
554  k3_large_21 *= 1.0 / 8.0 / _original_length[0];
555 
556  RankTwoTensor k4_large_22;
557  // col 1
558  k4_large_22(0, 0) = 0.25 * _grad_rot_0_local_t(0) * _avg_rot_local_t(0) * Ix_avg +
559  1.0 / 6.0 * _grad_rot_0_local_t(2) * _avg_rot_local_t(2) * Iy_avg +
560  1.0 / 6.0 * _grad_rot_0_local_t(1) * _avg_rot_local_t(1) * Iz_avg;
561  k4_large_22(1, 0) = 1.0 / 6.0 * _grad_rot_0_local_t(1) * _avg_rot_local_t(0) * Iz_avg;
562  k4_large_22(2, 0) = 1.0 / 6.0 * _grad_rot_0_local_t(2) * _avg_rot_local_t(0) * Iy_avg;
563 
564  // col2
565  k4_large_22(0, 1) = 1.0 / 6.0 * _grad_rot_0_local_t(0) * _avg_rot_local_t(1) * Iz_avg;
566  k4_large_22(1, 1) = 0.25 * _grad_rot_0_local_t(1) * _avg_rot_local_t(1) * Iz_avg +
567  1.0 / 6.0 * _grad_rot_0_local_t(0) * _avg_rot_local_t(0) * Iz_avg;
568  k4_large_22(2, 1) = 0.25 * _grad_rot_0_local_t(1) * _avg_rot_local_t(2) * Iz_avg;
569 
570  // col 3
571  k4_large_22(0, 2) = 1.0 / 6.0 * _grad_rot_0_local_t(0) * _avg_rot_local_t(2) * Iy_avg;
572  k4_large_22(1, 2) = 0.25 * _grad_rot_0_local_t(2) * _avg_rot_local_t(1) * Iy_avg;
573  k4_large_22(2, 2) = 0.25 * _grad_rot_0_local_t(2) * _avg_rot_local_t(2) * Iy_avg +
574  1.0 / 6.0 * _grad_rot_0_local_t(0) * _avg_rot_local_t(0) * Iy_avg;
575 
576  k3_large_22 += 1.0 / 8.0 / _original_length[0] * (k4_large_22 + k4_large_22.transpose());
577 
578  // Assembling final matrix
579  _K11[0] += _total_rotation[0].transpose() * (k1_large_11 + k2_large_11) * _total_rotation[0];
580  _K22[0] += _total_rotation[0].transpose() * (k1_large_22 + k2_large_22 + k3_large_22) *
581  _total_rotation[0];
582  _K21[0] += _total_rotation[0].transpose() * (k1_large_21 + k3_large_21) * _total_rotation[0];
583  _K21_cross[0] +=
584  _total_rotation[0].transpose() * (-k1_large_21 + k3_large_21) * _total_rotation[0];
585  _K22_cross[0] += _total_rotation[0].transpose() * (-k1_large_22 - k2_large_22 + k3_large_22) *
586  _total_rotation[0];
587  }
588 }
const VariableValue & _Iy
Coupled variable for the second moment of area in y direction, i.e., integral of y^2*dA over the cros...
MaterialProperty< RankTwoTensor > & _K21_cross
Stiffness matrix between displacement DOFs of one node to rotational DOFs of another node...
const VariableValue & _Iz
Coupled variable for the second moment of area in z direction, i.e., integral of z^2*dA over the cros...
MaterialProperty< RankTwoTensor > & _K22
Stiffness matrix between rotation DOFs of the same node.
RealVectorValue _avg_rot_local_t
Average rotation calculated in the beam local configuration at time t.
MaterialProperty< RankTwoTensor > & _K11
Stiffness matrix between displacement DOFs of same node or across nodes.
MaterialProperty< RankTwoTensor > & _K22_cross
Stiffness matrix between rotation DOFs of different nodes.
MaterialProperty< Real > & _original_length
Initial length of the beam.
const MaterialProperty< RealVectorValue > & _material_stiffness
Material stiffness vector that relates displacement strain increments to force increments.
RealVectorValue _grad_rot_0_local_t
Gradient of rotation calculated in the beam local configuration at time t.
const VariableValue & _area
Coupled variable for the beam cross-sectional area.
const bool _large_strain
Boolean flag to turn on large strain calculation.
const VariableValue & _Ix
Coupled variable for the second moment of area in x direction, i.e., integral of (y^2 + z^2)*dA over ...
MaterialProperty< RankTwoTensor > & _total_rotation
Rotational transformation from global coordinate system to beam local configuration at time t...
MaterialProperty< RankTwoTensor > & _K21
Stiffness matrix between displacement DOFs and rotation DOFs of the same node.
RealVectorValue _grad_disp_0_local_t
Gradient of displacement calculated in the beam local configuration at time t.

◆ initQpStatefulProperties()

void ComputeIncrementalBeamStrain::initQpStatefulProperties ( )
overrideprotectedvirtual

Definition at line 131 of file ComputeIncrementalBeamStrain.C.

132 {
133  // compute initial orientation of the beam for calculating initial rotation matrix
134  const std::vector<RealGradient> * orientation =
135  &_subproblem.assembly(_tid).getFE(FEType(), 1)->get_dxyzdxi();
136  RealGradient x_orientation = (*orientation)[0];
137  x_orientation /= x_orientation.norm();
138 
139  RealGradient y_orientation = getParam<RealGradient>("y_orientation");
140  y_orientation /= y_orientation.norm();
141  Real sum = x_orientation(0) * y_orientation(0) + x_orientation(1) * y_orientation(1) +
142  x_orientation(2) * y_orientation(2);
143 
144  if (std::abs(sum) > 1e-4)
145  mooseError("ComputeIncrementalBeamStrain: y_orientation should be perpendicular to "
146  "the axis of the beam.");
147 
148  // Calculate z orientation as a cross product of the x and y orientations
149  RealGradient z_orientation;
150  z_orientation(0) = (x_orientation(1) * y_orientation(2) - x_orientation(2) * y_orientation(1));
151  z_orientation(1) = (x_orientation(2) * y_orientation(0) - x_orientation(0) * y_orientation(2));
152  z_orientation(2) = (x_orientation(0) * y_orientation(1) - x_orientation(1) * y_orientation(0));
153 
154  // Rotation matrix from global to original beam local configuration
155  _original_local_config(0, 0) = x_orientation(0);
156  _original_local_config(0, 1) = x_orientation(1);
157  _original_local_config(0, 2) = x_orientation(2);
158  _original_local_config(1, 0) = y_orientation(0);
159  _original_local_config(1, 1) = y_orientation(1);
160  _original_local_config(1, 2) = y_orientation(2);
161  _original_local_config(2, 0) = z_orientation(0);
162  _original_local_config(2, 1) = z_orientation(1);
163  _original_local_config(2, 2) = z_orientation(2);
164 
166 
167  RealVectorValue temp;
168  _total_disp_strain[_qp] = temp;
169  _total_rot_strain[_qp] = temp;
170 }
MaterialProperty< RealVectorValue > & _total_disp_strain
Current total displacement strain integrated over the cross-section in global coordinate system...
RankTwoTensor _original_local_config
Rotational transformation from global coordinate system to initial beam local configuration.
MaterialProperty< RealVectorValue > & _total_rot_strain
Current total rotational strain integrated over the cross-section in global coordinate system...
MaterialProperty< RankTwoTensor > & _total_rotation
Rotational transformation from global coordinate system to beam local configuration at time t...

Member Data Documentation

◆ _area

const VariableValue& ComputeIncrementalBeamStrain::_area
protected

Coupled variable for the beam cross-sectional area.

Definition at line 54 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain(), and computeStiffnessMatrix().

◆ _avg_rot_local_t

RealVectorValue ComputeIncrementalBeamStrain::_avg_rot_local_t
protected

Average rotation calculated in the beam local configuration at time t.

Definition at line 126 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain(), and computeStiffnessMatrix().

◆ _Ay

const VariableValue& ComputeIncrementalBeamStrain::_Ay
protected

Coupled variable for the first moment of area in y direction, i.e., integral of y*dA over the cross-section.

Definition at line 57 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain(), and computeQpStrain().

◆ _Az

const VariableValue& ComputeIncrementalBeamStrain::_Az
protected

Coupled variable for the first moment of area in z direction, i.e., integral of z*dA over the cross-section.

Definition at line 60 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain(), and computeQpStrain().

◆ _disp0

RealVectorValue ComputeIncrementalBeamStrain::_disp0
protected

Displacement and rotations at the two nodes of the beam in the global coordinate system.

Definition at line 144 of file ComputeIncrementalBeamStrain.h.

Referenced by computeProperties(), computeQpStrain(), and ComputeFiniteBeamStrain::computeRotation().

◆ _disp1

RealVectorValue ComputeIncrementalBeamStrain::_disp1
protected

◆ _disp_eigenstrain

std::vector<const MaterialProperty<RealVectorValue> *> ComputeIncrementalBeamStrain::_disp_eigenstrain
protected

Vector of current displacement eigenstrains.

Definition at line 132 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain(), and computeQpStrain().

◆ _disp_eigenstrain_old

std::vector<const MaterialProperty<RealVectorValue> *> ComputeIncrementalBeamStrain::_disp_eigenstrain_old
protected

Vector of old displacement eigenstrains.

Definition at line 138 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain(), and computeQpStrain().

◆ _disp_num

std::vector<unsigned int> ComputeIncrementalBeamStrain::_disp_num
protected

Variable numbers corresponding to the displacement variables.

Definition at line 51 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain(), and computeProperties().

◆ _eigenstrain_names

std::vector<MaterialPropertyName> ComputeIncrementalBeamStrain::_eigenstrain_names
protected

Vector of beam eigenstrain names.

Definition at line 129 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain(), and computeQpStrain().

◆ _grad_disp_0_local_t

RealVectorValue ComputeIncrementalBeamStrain::_grad_disp_0_local_t
protected

Gradient of displacement calculated in the beam local configuration at time t.

Definition at line 120 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain(), and computeStiffnessMatrix().

◆ _grad_rot_0_local_t

RealVectorValue ComputeIncrementalBeamStrain::_grad_rot_0_local_t
protected

Gradient of rotation calculated in the beam local configuration at time t.

Definition at line 123 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain(), and computeStiffnessMatrix().

◆ _initial_rotation

MaterialProperty<RankTwoTensor>& ComputeIncrementalBeamStrain::_initial_rotation
protected

Rotational transformation from global coordinate system to initial beam local configuration.

Definition at line 161 of file ComputeIncrementalBeamStrain.h.

Referenced by computeProperties().

◆ _Ix

const VariableValue& ComputeIncrementalBeamStrain::_Ix
protected

Coupled variable for the second moment of area in x direction, i.e., integral of (y^2 + z^2)*dA over the cross-section.

Definition at line 69 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain(), and computeStiffnessMatrix().

◆ _Iy

const VariableValue& ComputeIncrementalBeamStrain::_Iy
protected

Coupled variable for the second moment of area in y direction, i.e., integral of y^2*dA over the cross-section.

Definition at line 63 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain(), and computeStiffnessMatrix().

◆ _Iz

const VariableValue& ComputeIncrementalBeamStrain::_Iz
protected

Coupled variable for the second moment of area in z direction, i.e., integral of z^2*dA over the cross-section.

Definition at line 66 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain(), and computeStiffnessMatrix().

◆ _K11

MaterialProperty<RankTwoTensor>& ComputeIncrementalBeamStrain::_K11
protected

Stiffness matrix between displacement DOFs of same node or across nodes.

Definition at line 102 of file ComputeIncrementalBeamStrain.h.

Referenced by computeStiffnessMatrix().

◆ _K21

MaterialProperty<RankTwoTensor>& ComputeIncrementalBeamStrain::_K21
protected

Stiffness matrix between displacement DOFs and rotation DOFs of the same node.

Definition at line 108 of file ComputeIncrementalBeamStrain.h.

Referenced by computeStiffnessMatrix().

◆ _K21_cross

MaterialProperty<RankTwoTensor>& ComputeIncrementalBeamStrain::_K21_cross
protected

Stiffness matrix between displacement DOFs of one node to rotational DOFs of another node.

Definition at line 105 of file ComputeIncrementalBeamStrain.h.

Referenced by computeStiffnessMatrix().

◆ _K22

MaterialProperty<RankTwoTensor>& ComputeIncrementalBeamStrain::_K22
protected

Stiffness matrix between rotation DOFs of the same node.

Definition at line 111 of file ComputeIncrementalBeamStrain.h.

Referenced by computeStiffnessMatrix().

◆ _K22_cross

MaterialProperty<RankTwoTensor>& ComputeIncrementalBeamStrain::_K22_cross
protected

Stiffness matrix between rotation DOFs of different nodes.

Definition at line 114 of file ComputeIncrementalBeamStrain.h.

Referenced by computeStiffnessMatrix().

◆ _large_strain

const bool ComputeIncrementalBeamStrain::_large_strain
protected

Boolean flag to turn on large strain calculation.

Definition at line 117 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain(), computeQpStrain(), and computeStiffnessMatrix().

◆ _material_stiffness

const MaterialProperty<RealVectorValue>& ComputeIncrementalBeamStrain::_material_stiffness
protected

Material stiffness vector that relates displacement strain increments to force increments.

Definition at line 99 of file ComputeIncrementalBeamStrain.h.

Referenced by computeStiffnessMatrix().

◆ _mech_disp_strain_increment

MaterialProperty<RealVectorValue>& ComputeIncrementalBeamStrain::_mech_disp_strain_increment
protected

Mechanical displacement strain increment (after removal of eigenstrains) integrated over the cross-section.

Definition at line 93 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain().

◆ _mech_rot_strain_increment

MaterialProperty<RealVectorValue>& ComputeIncrementalBeamStrain::_mech_rot_strain_increment
protected

Mechanical rotation strain increment (after removal of eigenstrains) integrated over the cross-section.

Definition at line 96 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain().

◆ _ndisp

unsigned int ComputeIncrementalBeamStrain::_ndisp
protected

Number of coupled displacement variables.

Definition at line 45 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain(), and computeProperties().

◆ _nonlinear_sys

NonlinearSystemBase& ComputeIncrementalBeamStrain::_nonlinear_sys
protected

Reference to the nonlinear system object.

Definition at line 147 of file ComputeIncrementalBeamStrain.h.

Referenced by computeProperties().

◆ _nrot

unsigned int ComputeIncrementalBeamStrain::_nrot
protected

Number of coupled rotational variables.

Definition at line 42 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain().

◆ _original_length

MaterialProperty<Real>& ComputeIncrementalBeamStrain::_original_length
protected

◆ _original_local_config

RankTwoTensor ComputeIncrementalBeamStrain::_original_local_config
protected

Rotational transformation from global coordinate system to initial beam local configuration.

Definition at line 72 of file ComputeIncrementalBeamStrain.h.

Referenced by computeProperties(), computeRotation(), and initQpStatefulProperties().

◆ _rot0

RealVectorValue ComputeIncrementalBeamStrain::_rot0
protected

◆ _rot1

RealVectorValue ComputeIncrementalBeamStrain::_rot1
protected

◆ _rot_eigenstrain

std::vector<const MaterialProperty<RealVectorValue> *> ComputeIncrementalBeamStrain::_rot_eigenstrain
protected

Vector of current rotational eigenstrains.

Definition at line 135 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain(), and computeQpStrain().

◆ _rot_eigenstrain_old

std::vector<const MaterialProperty<RealVectorValue> *> ComputeIncrementalBeamStrain::_rot_eigenstrain_old
protected

Vector of old rotational eigenstrains.

Definition at line 141 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain(), and computeQpStrain().

◆ _rot_num

std::vector<unsigned int> ComputeIncrementalBeamStrain::_rot_num
protected

Variable numbers corresponding to the rotational variables.

Definition at line 48 of file ComputeIncrementalBeamStrain.h.

Referenced by ComputeIncrementalBeamStrain(), and computeProperties().

◆ _soln_disp_index_0

std::vector<unsigned int> ComputeIncrementalBeamStrain::_soln_disp_index_0
protected

Indices of solution vector corresponding to displacement DOFs at the node 0.

Definition at line 149 of file ComputeIncrementalBeamStrain.h.

Referenced by computeProperties().

◆ _soln_disp_index_1

std::vector<unsigned int> ComputeIncrementalBeamStrain::_soln_disp_index_1
protected

Indices of solution vector corresponding to displacement DOFs at the node 1.

Definition at line 152 of file ComputeIncrementalBeamStrain.h.

Referenced by computeProperties().

◆ _soln_rot_index_0

std::vector<unsigned int> ComputeIncrementalBeamStrain::_soln_rot_index_0
protected

Indices of solution vector corresponding to rotation DOFs at the node 0.

Definition at line 155 of file ComputeIncrementalBeamStrain.h.

Referenced by computeProperties().

◆ _soln_rot_index_1

std::vector<unsigned int> ComputeIncrementalBeamStrain::_soln_rot_index_1
protected

Indices of solution vector corresponding to rotation DOFs at the node 1.

Definition at line 158 of file ComputeIncrementalBeamStrain.h.

Referenced by computeProperties().

◆ _total_disp_strain

MaterialProperty<RealVectorValue>& ComputeIncrementalBeamStrain::_total_disp_strain
protected

Current total displacement strain integrated over the cross-section in global coordinate system.

Definition at line 81 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain(), and initQpStatefulProperties().

◆ _total_disp_strain_old

const MaterialProperty<RealVectorValue>& ComputeIncrementalBeamStrain::_total_disp_strain_old
protected

Old total displacement strain integrated over the cross-section in global coordinate system.

Definition at line 87 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain().

◆ _total_rot_strain

MaterialProperty<RealVectorValue>& ComputeIncrementalBeamStrain::_total_rot_strain
protected

Current total rotational strain integrated over the cross-section in global coordinate system.

Definition at line 84 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain(), and initQpStatefulProperties().

◆ _total_rot_strain_old

const MaterialProperty<RealVectorValue>& ComputeIncrementalBeamStrain::_total_rot_strain_old
protected

Old total rotational strain integrated over the cross-section in global coordinate system.

Definition at line 90 of file ComputeIncrementalBeamStrain.h.

◆ _total_rotation

MaterialProperty<RankTwoTensor>& ComputeIncrementalBeamStrain::_total_rotation
protected

Rotational transformation from global coordinate system to beam local configuration at time t.

Definition at line 78 of file ComputeIncrementalBeamStrain.h.

Referenced by computeQpStrain(), ComputeFiniteBeamStrain::computeRotation(), computeRotation(), computeStiffnessMatrix(), and initQpStatefulProperties().


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