https://mooseframework.inl.gov
Loading...
Searching...
No Matches
PorosityFromStrain.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
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 "PorosityFromStrain.h"
11
14
15template <bool is_ad>
18{
20
21 params.addClassDescription("Porosity calculation from the inelastic strain.");
22
23 params.addParam<MaterialPropertyName>(
24 "porosity_name", "porosity", "Name of porosity material property");
26 "initial_porosity", "initial_porosity>=0.0 & initial_porosity<1.0", "Initial porosity");
27 params.addRequiredParam<MaterialPropertyName>("inelastic_strain",
28 "Name of the combined inelastic strain");
29 MooseEnum negative_behavior("ZERO INITIAL_CONDITION EXCEPTION", "INITIAL_CONDITION");
30 params.addParam<MooseEnum>(
31 "negative_behavior", negative_behavior, "Enum how to handle negative porosities");
32
33 return params;
34}
35
36template <bool is_ad>
38 : Material(parameters),
39 _porosity(declareGenericProperty<Real, is_ad>(getParam<MaterialPropertyName>("porosity_name"))),
40 _porosity_old(getMaterialPropertyOld<Real>("porosity_name")),
41 _initial_porosity(getParam<Real>("initial_porosity")),
42 _inelastic_strain(getGenericMaterialProperty<RankTwoTensor, is_ad>("inelastic_strain")),
43 _inelastic_strain_old(getMaterialPropertyOld<RankTwoTensor>("inelastic_strain")),
44 _negative_behavior(this->template getParam<MooseEnum>("negative_behavior")
45 .template getEnum<NegativeBehavior>())
46{
47}
48
49template <bool is_ad>
50void
52{
53 _porosity[_qp] = _initial_porosity;
54}
55
56template <bool is_ad>
57void
59{
60 _porosity[_qp] =
61 (1.0 - _porosity_old[_qp]) * (_inelastic_strain[_qp] - _inelastic_strain_old[_qp]).trace() +
62 _porosity_old[_qp];
63
64 if (_porosity[_qp] < 0.0)
65 {
66 if (_negative_behavior == NegativeBehavior::ZERO)
67 _porosity[_qp] = 0.0;
68 if (_negative_behavior == NegativeBehavior::INITIAL_CONDITION)
69 _porosity[_qp] = _initial_porosity;
70 if (_negative_behavior == NegativeBehavior::EXCEPTION)
71 mooseException("In ", _name, ": porosity is negative.");
72 }
73
74 using std::isnan;
75 if (isnan(_porosity[_qp]))
76 mooseException("In ", _name, ": porosity is nan. Cutting timestep.");
77}
registerMooseObject("SolidMechanicsApp", PorosityFromStrain)
void addRequiredRangeCheckedParam(const std::string &name, const std::string &parsed_function, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
static InputParameters validParams()
Porosity calculation from the inelastic strain.
static InputParameters validParams()
virtual void initQpStatefulProperties() override
PorosityFromStrainTempl(const InputParameters &parameters)
virtual void computeQpProperties() override