www.mooseframework.org
ComputeAxisymmetric1DIncrementalStrain.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 "UserObject.h"
12 
14 
17 {
19  params.addClassDescription(
20  "Compute strain increment for small strains in an axisymmetric 1D problem");
21  params.addParam<UserObjectName>("subblock_index_provider",
22  "SubblockIndexProvider user object name");
23  params.addCoupledVar("scalar_out_of_plane_strain", "Scalar variable for axisymmetric 1D problem");
24  params.addCoupledVar("out_of_plane_strain", "Nonlinear variable for axisymmetric 1D problem");
25 
26  return params;
27 }
28 
30  const InputParameters & parameters)
31  : Compute1DIncrementalStrain(parameters),
32  _disp_old_0(coupledValueOld("displacements", 0)),
33  _subblock_id_provider(isParamValid("subblock_index_provider")
34  ? &getUserObject<SubblockIndexProvider>("subblock_index_provider")
35  : nullptr),
36  _has_out_of_plane_strain(isCoupled("out_of_plane_strain")),
37  _out_of_plane_strain(_has_out_of_plane_strain ? coupledValue("out_of_plane_strain") : _zero),
38  _out_of_plane_strain_old(_has_out_of_plane_strain ? coupledValueOld("out_of_plane_strain")
39  : _zero),
40  _has_scalar_out_of_plane_strain(isCoupledScalar("scalar_out_of_plane_strain"))
41 {
43  mooseError("Must define only one of out_of_plane_strain or scalar_out_of_plane_strain");
44 
46  {
47  const auto nscalar_strains = coupledScalarComponents("scalar_out_of_plane_strain");
48  _scalar_out_of_plane_strain.resize(nscalar_strains);
49  _scalar_out_of_plane_strain_old.resize(nscalar_strains);
50  for (unsigned int i = 0; i < nscalar_strains; ++i)
51  {
52  _scalar_out_of_plane_strain[i] = &coupledScalarValue("scalar_out_of_plane_strain", i);
53  _scalar_out_of_plane_strain_old[i] = &coupledScalarValueOld("scalar_out_of_plane_strain", i);
54  }
55  }
56 }
57 
58 void
60 {
62 
64  mooseError("The coordinate system must be set to RZ for Axisymmetric 1D simulations");
65 }
66 
67 Real
69 {
72  else
73  return _out_of_plane_strain[_qp];
74 }
75 
76 Real
78 {
81  else
83 }
84 
85 Real
87 {
89  return (*_disp[0])[_qp] / _q_point[_qp](0);
90  else
91  return 0.0;
92 }
93 
94 Real
96 {
98  return _disp_old_0[_qp] / _q_point[_qp](0);
99  else
100  return 0.0;
101 }
const MooseArray< Point > & _q_point
std::vector< const VariableValue * > _scalar_out_of_plane_strain_old
ComputeAxisymmetric1DIncrementalStrain defines a strain increment only for incremental small strains ...
bool _has_out_of_plane_strain
Whether an out-of-plane strain variable is coupled.
bool absoluteFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
Real computeGradDispZZOld() override
Computes the old dUz/dz for axisymmetric problems, where .
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
const VariableValue & coupledScalarValueOld(const std::string &var_name, unsigned int comp=0) const
Moose::CoordinateSystemType getBlockCoordSystem()
Abstract base class for user objects that provide an index for a given element that is independent of...
Compute1DIncrementalStrain defines a strain increment only for incremental small strains in 1D proble...
std::vector< const VariableValue * > _disp
Displacement variables.
bool _has_scalar_out_of_plane_strain
Whether an out-of-plane strain scalar variable is coupled.
Real computeGradDispYYOld() override
Computes the old dUy/dy for axisymmetric problems.
const VariableValue & _disp_old_0
the old value of the first component of the displacements vector
const VariableValue & coupledScalarValue(const std::string &var_name, unsigned int comp=0) const
Real computeGradDispYY() override
Computes the current dUy/dy for axisymmetric problems.
static InputParameters validParams()
Real computeGradDispZZ() override
Computes the current dUz/dz for axisymmetric problems, where .
void addCoupledVar(const std::string &name, const std::string &doc_string)
registerMooseObject("SolidMechanicsApp", ComputeAxisymmetric1DIncrementalStrain)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const VariableValue & _out_of_plane_strain
{@ Current and old values of the out-of-plane strain variable
unsigned int coupledScalarComponents(const std::string &var_name) const
void mooseError(Args &&... args) const
void addClassDescription(const std::string &doc_string)
unsigned int getCurrentSubblockIndex() const
gets its subblock index for current element
std::vector< const VariableValue * > _scalar_out_of_plane_strain
{@ Current and old values of the out-of-plane strain scalar variable
ComputeAxisymmetric1DIncrementalStrain(const InputParameters &parameters)