www.mooseframework.org
GeneralizedPlaneStrain.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 "GeneralizedPlaneStrain.h"
11 
12 // MOOSE includes
13 #include "Assembly.h"
15 #include "MooseVariableScalar.h"
16 #include "SystemBase.h"
17 #include "ReferenceResidualProblem.h"
18 #include "InputParameters.h"
19 
20 #include <algorithm>
21 
22 registerMooseObject("TensorMechanicsApp", GeneralizedPlaneStrain);
23 
25 
26 InputParameters
28 {
29  InputParameters params = ScalarKernel::validParams();
30  params.addClassDescription("Generalized Plane Strain Scalar Kernel");
31  params.addRequiredParam<UserObjectName>("generalized_plane_strain",
32  "The name of the GeneralizedPlaneStrainUserObject");
33  params.addParam<unsigned int>(
34  "scalar_out_of_plane_strain_index",
35  "The index number of scalar_out_of_plane_strain this kernel acts on");
36 
37  return params;
38 }
39 
40 GeneralizedPlaneStrain::GeneralizedPlaneStrain(const InputParameters & parameters)
41  : ScalarKernel(parameters),
42  _gps(getUserObject<GeneralizedPlaneStrainUserObject>("generalized_plane_strain")),
43  _scalar_var_id(isParamValid("scalar_out_of_plane_strain_index")
44  ? getParam<unsigned int>("scalar_out_of_plane_strain_index")
45  : 0)
46 {
47  auto fe_problem_base = getCheckedPointerParam<FEProblemBase *>("_fe_problem_base");
48  if (auto ref_resid_problem = dynamic_cast<ReferenceResidualProblem *>(fe_problem_base))
49  {
50  const auto & ref_parameters = ref_resid_problem->parameters();
51  if (isParamValid("extra_vector_tags") && ref_parameters.isParamValid("reference_vector"))
52  {
53  const auto & reference_vector_tag_name = ref_parameters.get<TagName>("reference_vector");
54  const auto & extra_vector_tag_names = getParam<std::vector<TagName>>("extra_vector_tags");
55  if (std::find(extra_vector_tag_names.begin(),
56  extra_vector_tag_names.end(),
57  reference_vector_tag_name) != extra_vector_tag_names.end())
58  {
59  _ref_tag_id.insert(_subproblem.getVectorTagID(reference_vector_tag_name));
60  std::set_difference(_vector_tags.begin(),
61  _vector_tags.end(),
62  _ref_tag_id.begin(),
63  _ref_tag_id.end(),
64  std::inserter(_non_ref_tags, _non_ref_tags.begin()));
65  }
66  }
67  }
68 }
69 
70 void
72 {
73  if (!_ref_tag_id.empty())
74  _vector_tags = _non_ref_tags;
75 
76  prepareVectorTag(_assembly, _var.number());
77  for (_i = 0; _i < _local_re.size(); ++_i)
78  _local_re(_i) += _gps.returnResidual(_scalar_var_id);
79 
80  accumulateTaggedLocalResidual();
81 
82  if (!_ref_tag_id.empty())
83  {
84  _vector_tags = _ref_tag_id;
85 
86  prepareVectorTag(_assembly, _var.number());
87  for (_i = 0; _i < _local_re.size(); ++_i)
89 
90  accumulateTaggedLocalResidual();
91  }
92 }
93 
99 void
101 {
102  prepareMatrixTag(_assembly, _var.number(), _var.number());
103  for (_i = 0; _i < _local_ke.m(); ++_i)
104  _local_ke(_i, _i) += _gps.returnJacobian(_scalar_var_id);
105 
106  accumulateTaggedLocalMatrix();
107 }
GeneralizedPlaneStrain
Definition: GeneralizedPlaneStrain.h:23
GeneralizedPlaneStrain::_ref_tag_id
std::set< TagID > _ref_tag_id
The reference vector tag ID.
Definition: GeneralizedPlaneStrain.h:38
registerMooseObject
registerMooseObject("TensorMechanicsApp", GeneralizedPlaneStrain)
GeneralizedPlaneStrain::computeResidual
virtual void computeResidual()
Definition: GeneralizedPlaneStrain.C:71
GeneralizedPlaneStrain::_gps
const GeneralizedPlaneStrainUserObject & _gps
Definition: GeneralizedPlaneStrain.h:34
GeneralizedPlaneStrain::computeJacobian
virtual void computeJacobian()
method to provide the diagonal jacobian term for scalar variable using value returned from Postproces...
Definition: GeneralizedPlaneStrain.C:100
GeneralizedPlaneStrainUserObject::returnJacobian
virtual Real returnJacobian(unsigned int scalar_var_id=0) const
Definition: GeneralizedPlaneStrainUserObject.C:147
GeneralizedPlaneStrain::validParams
static InputParameters validParams()
Definition: GeneralizedPlaneStrain.C:27
GeneralizedPlaneStrainUserObject::returnResidual
virtual Real returnResidual(unsigned int scalar_var_id=0) const
Definition: GeneralizedPlaneStrainUserObject.C:123
GeneralizedPlaneStrain.h
GeneralizedPlaneStrain::GeneralizedPlaneStrain
GeneralizedPlaneStrain(const InputParameters &parameters)
Definition: GeneralizedPlaneStrain.C:40
GeneralizedPlaneStrainUserObject::returnReferenceResidual
virtual Real returnReferenceResidual(unsigned int scalar_var_id=0) const
Definition: GeneralizedPlaneStrainUserObject.C:132
validParams
InputParameters validParams()
GeneralizedPlaneStrain::_scalar_var_id
const unsigned int _scalar_var_id
Definition: GeneralizedPlaneStrain.h:35
GeneralizedPlaneStrainUserObject
Definition: GeneralizedPlaneStrainUserObject.h:27
defineLegacyParams
defineLegacyParams(GeneralizedPlaneStrain)
GeneralizedPlaneStrain::_non_ref_tags
std::set< TagID > _non_ref_tags
The non-reference vector tag IDs.
Definition: GeneralizedPlaneStrain.h:41
GeneralizedPlaneStrainUserObject.h