www.mooseframework.org
TrussMaterial.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 
10 #include "TrussMaterial.h"
11 
12 // MOOSE includes
13 #include "Material.h"
14 #include "MooseMesh.h"
15 #include "MooseVariable.h"
16 #include "NonlinearSystem.h"
17 
18 #include "libmesh/quadrature.h"
19 
21 
22 InputParameters
24 {
25  InputParameters params = Material::validParams();
26  params.addParam<std::string>("base_name",
27  "Optional parameter that allows the user to define "
28  "multiple mechanics material systems on the same "
29  "block, i.e. for multiple phases");
30  params.addRequiredParam<std::vector<VariableName>>(
31  "displacements",
32  "The displacements appropriate for the simulation geometry and coordinate system");
33  params.addCoupledVar("youngs_modulus", "Variable containing Young's modulus");
34  return params;
35 }
36 
37 TrussMaterial::TrussMaterial(const InputParameters & parameters)
38  : Material(parameters),
39  _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
40  _youngs_modulus(coupledValue("youngs_modulus")),
41  _total_stretch(declareProperty<Real>(_base_name + "total_stretch")),
42  _elastic_stretch(declareProperty<Real>(_base_name + "elastic_stretch")),
43  _axial_stress(declareProperty<Real>(_base_name + "axial_stress")),
44  _e_over_l(declareProperty<Real>(_base_name + "e_over_l"))
45 {
46  const std::vector<VariableName> & nl_vnames(getParam<std::vector<VariableName>>("displacements"));
47  _ndisp = nl_vnames.size();
48 
49  // fetch nonlinear variables
50  for (unsigned int i = 0; i < _ndisp; ++i)
51  _disp_var.push_back(&_fe_problem.getStandardVariable(_tid, nl_vnames[i]));
52 }
53 
54 void
56 {
57  _axial_stress[_qp] = 0.0;
58  _total_stretch[_qp] = 0.0;
59  _elastic_stretch[_qp] = 0.0;
60 }
61 
62 void
64 {
65  // check for consistency of the number of element nodes
66  mooseAssert(_current_elem->n_nodes() == 2, "Truss element needs to have exactly two nodes.");
67 
68  // fetch the two end nodes for _current_elem
69  std::vector<const Node *> node;
70  for (unsigned int i = 0; i < 2; ++i)
71  node.push_back(_current_elem->node_ptr(i));
72 
73  // calculate original length of a truss element
74  RealGradient dxyz;
75  for (unsigned int i = 0; i < _ndisp; ++i)
76  dxyz(i) = (*node[1])(i) - (*node[0])(i);
77  _origin_length = dxyz.norm();
78 
79  // fetch the solution for the two end nodes
80  NonlinearSystemBase & nonlinear_sys = _fe_problem.getNonlinearSystemBase();
81  const NumericVector<Number> & sol = *nonlinear_sys.currentSolution();
82 
83  std::vector<Real> disp0, disp1;
84  for (unsigned int i = 0; i < _ndisp; ++i)
85  {
86  disp0.push_back(sol(node[0]->dof_number(nonlinear_sys.number(), _disp_var[i]->number(), 0)));
87  disp1.push_back(sol(node[1]->dof_number(nonlinear_sys.number(), _disp_var[i]->number(), 0)));
88  }
89 
90  // calculate current length of a truss element
91  for (unsigned int i = 0; i < _ndisp; ++i)
92  dxyz(i) += disp1[i] - disp0[i];
93  _current_length = dxyz.norm();
94 
95  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
96  {
98 
100  computeQpStress();
101  }
102 }
defineLegacyParams
defineLegacyParams(TrussMaterial)
TrussMaterial::_current_length
Real _current_length
Definition: TrussMaterial.h:47
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
TrussMaterial::computeQpStress
virtual void computeQpStress()=0
TrussMaterial::initQpStatefulProperties
virtual void initQpStatefulProperties()
Definition: TrussMaterial.C:55
TrussMaterial::validParams
static InputParameters validParams()
Definition: TrussMaterial.C:23
TrussMaterial::_ndisp
unsigned int _ndisp
Definition: TrussMaterial.h:38
validParams
InputParameters validParams()
TrussMaterial::TrussMaterial
TrussMaterial(const InputParameters &parameters)
Definition: TrussMaterial.C:37
TrussMaterial
Definition: TrussMaterial.h:20
TrussMaterial::computeProperties
virtual void computeProperties()
Definition: TrussMaterial.C:63
TrussMaterial::_e_over_l
MaterialProperty< Real > & _e_over_l
Definition: TrussMaterial.h:44
TrussMaterial::computeQpStrain
virtual void computeQpStrain()=0
TrussMaterial.h
TrussMaterial::_total_stretch
MaterialProperty< Real > & _total_stretch
Definition: TrussMaterial.h:41
TrussMaterial::_youngs_modulus
const VariableValue & _youngs_modulus
Definition: TrussMaterial.h:39
TrussMaterial::_axial_stress
MaterialProperty< Real > & _axial_stress
Definition: TrussMaterial.h:43
TrussMaterial::_origin_length
Real _origin_length
Definition: TrussMaterial.h:46
TrussMaterial::_elastic_stretch
MaterialProperty< Real > & _elastic_stretch
Definition: TrussMaterial.h:42
TrussMaterial::_disp_var
std::vector< MooseVariable * > _disp_var
Definition: TrussMaterial.h:34