www.mooseframework.org
SolidModel.h
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 #pragma once
11 
12 #include "DerivativeMaterialInterface.h"
13 #include "SymmTensor.h"
14 #include "RankTwoTensor.h"
15 
16 // Forward declarations
17 class ConstitutiveModel;
18 class SolidModel;
20 class PiecewiseLinear;
21 class VolumetricModel;
22 namespace SolidMechanics
23 {
24 class Element;
25 }
26 
27 template <>
28 InputParameters validParams<SolidModel>();
29 
33 class SolidModel : public DerivativeMaterialInterface<Material>
34 {
35 public:
36  SolidModel(const InputParameters & parameters);
37  virtual ~SolidModel();
38 
39  virtual void initStatefulProperties(unsigned n_points);
40 
41  virtual void applyThermalStrain();
42  virtual void applyVolumetricStrain();
43 
44  static void
45  rotateSymmetricTensor(const ColumnMajorMatrix & R, const SymmTensor & T, SymmTensor & result);
46 
48  {
49  CR_ABRUPT = 0,
53  };
54 
55  const QBase * qrule() { return _qrule; }
56  const Point & q_point(unsigned i) const { return _q_point[i]; }
57  Real JxW(unsigned i) const { return _JxW[i]; }
58 
59 protected:
60  Moose::CoordinateSystemType _coord_type;
61 
62  const std::string _appended_property_name;
63 
69 
71  Real _lambda;
75 
76  const Function * _youngs_modulus_function;
77  const Function * _poissons_ratio_function;
78 
82  const Real _cracking_beta;
83  const std::string _compute_method;
84  const Function * const _cracking_stress_function;
85 
87  std::vector<unsigned int> _active_crack_planes;
88  const unsigned int _max_cracks;
90  // std::map<Point, unsigned> _cracked_this_step_count;
91  // std::map<Point, unsigned> _cracked_this_step;
92 
93  const bool _has_temp;
94  const VariableValue & _temperature;
95  const VariableValue & _temperature_old;
96  const VariableGradient & _temp_grad;
97  const Real _alpha;
98  const Function * _alpha_function;
103  Real _ref_temp;
104 
105  std::map<SubdomainID, std::vector<MooseSharedPointer<VolumetricModel>>> _volumetric_models;
106  std::set<std::string> _dep_matl_props;
107 
108  MaterialProperty<SymmTensor> & _stress;
109 
110 private:
111  const MaterialProperty<SymmTensor> & _stress_old_prop;
112 
113 protected:
115 
116  MaterialProperty<SymmTensor> & _total_strain;
117  const MaterialProperty<SymmTensor> & _total_strain_old;
118 
119  MaterialProperty<SymmTensor> & _elastic_strain;
120  const MaterialProperty<SymmTensor> & _elastic_strain_old;
121 
122  MaterialProperty<RealVectorValue> * _crack_flags;
123  const MaterialProperty<RealVectorValue> * _crack_flags_old;
124  RealVectorValue _crack_flags_local;
125  MaterialProperty<RealVectorValue> * _crack_count;
126  const MaterialProperty<RealVectorValue> * _crack_count_old;
127  MaterialProperty<ColumnMajorMatrix> * _crack_rotation;
128  const MaterialProperty<ColumnMajorMatrix> * _crack_rotation_old;
129  MaterialProperty<RealVectorValue> * _crack_strain;
130  const MaterialProperty<RealVectorValue> * _crack_strain_old;
131  MaterialProperty<RealVectorValue> * _crack_max_strain;
132  const MaterialProperty<RealVectorValue> * _crack_max_strain_old;
133  ColumnMajorMatrix _principal_strain;
134 
135  MaterialProperty<SymmElasticityTensor> & _elasticity_tensor;
136  MaterialProperty<SymmElasticityTensor> & _Jacobian_mult;
137 
138  // Accumulate derivatives of strain tensors with respect to Temperature into this
140 
141  // The derivative of the stress with respect to Temperature
142  MaterialProperty<SymmTensor> & _d_stress_dT;
143 
152 
153  const bool _compute_JIntegral;
155 
156  // These are used in calculation of the J integral
157  MaterialProperty<Real> * _SED;
158  const MaterialProperty<Real> * _SED_old;
159  MaterialProperty<RankTwoTensor> * _Eshelby_tensor;
160  MaterialProperty<RealVectorValue> * _J_thermal_term_vec;
161 
162  // This is used in calculation of the J Integral and Interaction Integral
164 
165  virtual void initQpStatefulProperties();
166 
167  virtual void initialSetup();
168  virtual void timestepSetup();
169  virtual void jacobianSetup();
170 
171  virtual void computeProperties();
172 
177  virtual bool updateElasticityTensor(SymmElasticityTensor & tensor);
178 
179  virtual void elementInit() {}
180 
182  virtual void modifyStrainIncrement();
183 
185  virtual void crackingStrainDirections();
186 
187  virtual unsigned int getNumKnownCrackDirs() const;
188 
190  virtual void computeStress()
191  {
192  mooseError("SolidModel::computeStress must be defined by the derived class");
193  }
194 
195  // Compute Eshelby tensor, used in J Integral calculation
196  virtual void computeEshelby();
197 
198  // Compute strain energy density, used in Eshelby tensor calculation
199  virtual void computeStrainEnergyDensity();
200 
201  // Compute quantity used in thermal term of J Integral
202  virtual void computeThermalJvec();
203 
204  // Compute current thermal expansion coefficient, used in J Integral and Interaction Integral
206 
207  /*
208  * Determine whether new cracks have formed.
209  * Rotate old and new stress to global, if cracking active
210  */
211  virtual void crackingStressRotation();
212 
213  virtual Real computeCrackFactor(int i, Real & sigma, Real & flagVal);
214 
216  virtual void finalizeStress();
217 
218  virtual void computePreconditioning();
219 
220  void applyCracksToTensor(SymmTensor & tensor, const RealVectorValue & sigma);
221 
223 
225 
226  const SolidMechanics::Element * element() const { return _element; }
227 
228  int delta(int i, int j) const { return i == j; }
229 
230  template <typename T>
231  MaterialProperty<T> & createProperty(const std::string & prop_name)
232  {
233  std::string name(prop_name + _appended_property_name);
234  return declareProperty<T>(name);
235  }
236 
237  template <typename T>
238  const MaterialProperty<T> & getPropertyOld(const std::string & prop_name)
239  {
240  std::string name(prop_name + _appended_property_name);
241  return getMaterialPropertyOld<T>(name);
242  }
243 
244  virtual void checkElasticConstants();
245 
246  virtual void createElasticityTensor();
247 
248  std::vector<SubdomainID> _block_id;
249 
250  std::map<SubdomainID, MooseSharedPointer<ConstitutiveModel>> _constitutive_model;
251  // This set keeps track of the dynamic memory allocated in this object
252  std::set<MooseSharedPointer<ConstitutiveModel>> _models_to_free;
254 
256  virtual void computeConstitutiveModelStress();
257 
258  void createConstitutiveModel(const std::string & cm_name);
259 
261  bool & _step_zero;
262  bool & _step_one;
264 
265 private:
266  void computeCrackStrainAndOrientation(ColumnMajorMatrix & principal_strain);
267 
269 
271 
273 };
SolidModel::_youngs_modulus
Real _youngs_modulus
Definition: SolidModel.h:74
SolidModel::computeThermalJvec
virtual void computeThermalJvec()
Definition: SolidModel.C:1630
SolidModel::_active_crack_planes
std::vector< unsigned int > _active_crack_planes
Definition: SolidModel.h:87
SolidModel::_compute_JIntegral
const bool _compute_JIntegral
Definition: SolidModel.h:153
SymmTensor.h
SolidModel::_crack_rotation_old
const MaterialProperty< ColumnMajorMatrix > * _crack_rotation_old
Definition: SolidModel.h:128
SolidModel::_current_instantaneous_thermal_expansion_coef
MaterialProperty< Real > * _current_instantaneous_thermal_expansion_coef
Definition: SolidModel.h:163
SolidModel::_step_one
bool & _step_one
Definition: SolidModel.h:262
SolidModel::createElasticityTensor
virtual void createElasticityTensor()
Definition: SolidModel.C:500
SolidModel::elasticityTensor
SymmElasticityTensor * elasticityTensor() const
Definition: SolidModel.h:224
SolidModel::createProperty
MaterialProperty< T > & createProperty(const std::string &prop_name)
Definition: SolidModel.h:231
SolidModel::CRACKING_RELEASE
CRACKING_RELEASE
Definition: SolidModel.h:47
SolidModel::_crack_strain_old
const MaterialProperty< RealVectorValue > * _crack_strain_old
Definition: SolidModel.h:130
SolidModel::_cracking_alpha
Real _cracking_alpha
Definition: SolidModel.h:86
SolidModel::_local_elasticity_tensor
SymmElasticityTensor * _local_elasticity_tensor
Definition: SolidModel.h:272
SolidModel::_d_stress_dT
MaterialProperty< SymmTensor > & _d_stress_dT
Definition: SolidModel.h:142
SolidModel::CR_ABRUPT
Definition: SolidModel.h:49
SolidModel::_shear_modulus
Real _shear_modulus
Definition: SolidModel.h:73
SolidModel::crackingStressRotation
virtual void crackingStressRotation()
Definition: SolidModel.C:1237
SolidModel::_cracking_release
const CRACKING_RELEASE _cracking_release
Definition: SolidModel.h:79
SolidModel::_temperature_old
const VariableValue & _temperature_old
Definition: SolidModel.h:95
SolidModel::computeProperties
virtual void computeProperties()
Definition: SolidModel.C:729
ConstitutiveModel
Definition: ConstitutiveModel.h:22
SolidModel::_compute_method
const std::string _compute_method
Definition: SolidModel.h:83
SolidModel::createElement
SolidMechanics::Element * createElement()
Definition: SolidModel.C:1467
SolidModel::_youngs_modulus_set
bool _youngs_modulus_set
Definition: SolidModel.h:68
SolidModel::_total_strain_increment
SymmTensor _total_strain_increment
Total strain increment, including mechanical strains and eigenstrains.
Definition: SolidModel.h:145
SolidModel::_constitutive_active
bool _constitutive_active
Definition: SolidModel.h:253
SolidModel::computeStrainEnergyDensity
virtual void computeStrainEnergyDensity()
Definition: SolidModel.C:780
SolidModel::_SED
MaterialProperty< Real > * _SED
Definition: SolidModel.h:157
SolidModel::_appended_property_name
const std::string _appended_property_name
Definition: SolidModel.h:62
SolidModel::_crack_flags
MaterialProperty< RealVectorValue > * _crack_flags
Definition: SolidModel.h:122
SolidModel::_J_thermal_term_vec
MaterialProperty< RealVectorValue > * _J_thermal_term_vec
Definition: SolidModel.h:160
SolidModel::getNumKnownCrackDirs
virtual unsigned int getNumKnownCrackDirs() const
Definition: SolidModel.C:1455
VolumetricModel
Definition: VolumetricModel.h:21
SolidModel::_max_cracks
const unsigned int _max_cracks
Definition: SolidModel.h:88
SolidModel::jacobianSetup
virtual void jacobianSetup()
Definition: SolidModel.C:533
SolidModel::_cracking_beta
const Real _cracking_beta
Definition: SolidModel.h:82
SolidModel::_compute_InteractionIntegral
const bool _compute_InteractionIntegral
Definition: SolidModel.h:154
SolidModel::_strain_increment
SymmTensor _strain_increment
In most models, this is the mechanical strain increment, but for inelastic models,...
Definition: SolidModel.h:151
SolidModel::_step_zero
bool & _step_zero
Restartable data to check for the zeroth and first time steps for thermal calculations.
Definition: SolidModel.h:261
SolidModel::_volumetric_models
std::map< SubdomainID, std::vector< MooseSharedPointer< VolumetricModel > > > _volumetric_models
Definition: SolidModel.h:105
SolidModel::_alpha_function
const Function * _alpha_function
Definition: SolidModel.h:98
SolidModel::CR_EXPONENTIAL
Definition: SolidModel.h:50
SolidModel::_Jacobian_mult
MaterialProperty< SymmElasticityTensor > & _Jacobian_mult
Definition: SolidModel.h:136
SolidModel::finalizeStress
virtual void finalizeStress()
Rotate stress to current configuration.
Definition: SolidModel.C:932
SolidModel::_mechanical_strain_increment
SymmTensor _mechanical_strain_increment
Mechanical strain increment, which is the total strain increment minus eigenstrains.
Definition: SolidModel.h:147
SolidModel::_stress_old_prop
const MaterialProperty< SymmTensor > & _stress_old_prop
Definition: SolidModel.h:111
SolidModel::_constitutive_model
std::map< SubdomainID, MooseSharedPointer< ConstitutiveModel > > _constitutive_model
Definition: SolidModel.h:250
SolidModel::_poissons_ratio
Real _poissons_ratio
Definition: SolidModel.h:72
SolidModel::_crack_flags_old
const MaterialProperty< RealVectorValue > * _crack_flags_old
Definition: SolidModel.h:123
SolidModel::_block_id
std::vector< SubdomainID > _block_id
Definition: SolidModel.h:248
SolidModel::_coord_type
Moose::CoordinateSystemType _coord_type
Definition: SolidModel.h:60
SolidModel::_crack_count
MaterialProperty< RealVectorValue > * _crack_count
Definition: SolidModel.h:125
SymmElasticityTensor
This class defines a basic set of capabilities any elasticity tensor should have.
Definition: SymmElasticityTensor.h:55
SolidMechanics
Definition: AxisymmetricRZ.h:16
SolidModel::_bulk_modulus_set
bool _bulk_modulus_set
Definition: SolidModel.h:64
SolidModel::_temp_grad
const VariableGradient & _temp_grad
Definition: SolidModel.h:96
SolidModel::_bulk_modulus
Real _bulk_modulus
Definition: SolidModel.h:70
SolidModel::_d_strain_dT
SymmTensor _d_strain_dT
Definition: SolidModel.h:139
SolidModel::_has_stress_free_temp
bool _has_stress_free_temp
Definition: SolidModel.h:100
SolidModel::q_point
const Point & q_point(unsigned i) const
Definition: SolidModel.h:56
SolidModel::_lambda_set
bool _lambda_set
Definition: SolidModel.h:65
SolidModel::computeEshelby
virtual void computeEshelby()
Definition: SolidModel.C:792
SolidModel::_crack_strain
MaterialProperty< RealVectorValue > * _crack_strain
Definition: SolidModel.h:129
SolidModel::applyVolumetricStrain
virtual void applyVolumetricStrain()
Definition: SolidModel.C:649
SolidModel::_cracking_stress_function
const Function *const _cracking_stress_function
Definition: SolidModel.h:84
SolidModel::_models_to_free
std::set< MooseSharedPointer< ConstitutiveModel > > _models_to_free
Definition: SolidModel.h:252
SolidModel::getPropertyOld
const MaterialProperty< T > & getPropertyOld(const std::string &prop_name)
Definition: SolidModel.h:238
SolidModel::~SolidModel
virtual ~SolidModel()
Definition: SolidModel.C:368
SolidModel::initialSetup
virtual void initialSetup()
Definition: SolidModel.C:957
SolidModel::computeCrackFactor
virtual Real computeCrackFactor(int i, Real &sigma, Real &flagVal)
Definition: SolidModel.C:1408
SolidModel::updateElasticityTensor
virtual bool updateElasticityTensor(SymmElasticityTensor &tensor)
Return true if the elasticity tensor changed.
Definition: SolidModel.C:891
SolidModel::computeCurrentInstantaneousThermalExpansionCoefficient
virtual void computeCurrentInstantaneousThermalExpansionCoefficient()
Definition: SolidModel.C:1646
SolidModel::initStatefulProperties
virtual void initStatefulProperties(unsigned n_points)
Definition: SolidModel.C:1615
SolidModel::_total_strain_old
const MaterialProperty< SymmTensor > & _total_strain_old
Definition: SolidModel.h:117
SolidModel::computeConstitutiveModelStress
virtual void computeConstitutiveModelStress()
Compute the stress (sigma += deltaSigma)
Definition: SolidModel.C:841
SolidModel
SolidModel is the base class for all this module's solid mechanics material models.
Definition: SolidModel.h:33
SolidModel::_crack_flags_local
RealVectorValue _crack_flags_local
Definition: SolidModel.h:124
name
const std::string name
Definition: Setup.h:21
SolidModel::elementInit
virtual void elementInit()
Definition: SolidModel.h:179
SolidModel::CR_POWER
Definition: SolidModel.h:51
SolidMechanics::Element
Element is the base class for all of this module's solid mechanics element formulations.
Definition: Element.h:25
SolidModel::_elasticity_tensor
MaterialProperty< SymmElasticityTensor > & _elasticity_tensor
Definition: SolidModel.h:135
SolidModel::modifyStrainIncrement
virtual void modifyStrainIncrement()
Modify increment for things like thermal strain.
Definition: SolidModel.C:560
SolidModel::delta
int delta(int i, int j) const
Definition: SolidModel.h:228
SolidModel::_SED_old
const MaterialProperty< Real > * _SED_old
Definition: SolidModel.h:158
SolidModel::_youngs_modulus_function
const Function * _youngs_modulus_function
Definition: SolidModel.h:76
SolidModel::_temperature
const VariableValue & _temperature
Definition: SolidModel.h:94
SolidModel::applyThermalStrain
virtual void applyThermalStrain()
Definition: SolidModel.C:591
SolidModel::computeStress
virtual void computeStress()
Compute the stress (sigma += deltaSigma)
Definition: SolidModel.h:190
SolidModel::_mean_alpha_function
bool _mean_alpha_function
Definition: SolidModel.h:102
SolidModel::_shear_modulus_set
bool _shear_modulus_set
Definition: SolidModel.h:67
SymmTensor
Definition: SymmTensor.h:21
SolidModel::_piecewise_linear_alpha_function
PiecewiseLinear * _piecewise_linear_alpha_function
Definition: SolidModel.h:99
SolidModel::_cracking_stress
Real _cracking_stress
Definition: SolidModel.h:80
SolidModel::applyCracksToTensor
void applyCracksToTensor(SymmTensor &tensor, const RealVectorValue &sigma)
Definition: SolidModel.C:1123
SolidModel::_crack_rotation
MaterialProperty< ColumnMajorMatrix > * _crack_rotation
Definition: SolidModel.h:127
SolidModel::crackingStrainDirections
virtual void crackingStrainDirections()
Determine cracking directions. Rotate elasticity tensor.
Definition: SolidModel.C:1048
SolidModel::_crack_max_strain
MaterialProperty< RealVectorValue > * _crack_max_strain
Definition: SolidModel.h:131
SolidModel::_total_strain
MaterialProperty< SymmTensor > & _total_strain
Definition: SolidModel.h:116
SolidModel::_Eshelby_tensor
MaterialProperty< RankTwoTensor > * _Eshelby_tensor
Definition: SolidModel.h:159
SolidModel::_element
SolidMechanics::Element * _element
Definition: SolidModel.h:270
SolidModel::_dep_matl_props
std::set< std::string > _dep_matl_props
Definition: SolidModel.h:106
SolidModel::_principal_strain
ColumnMajorMatrix _principal_strain
Definition: SolidModel.h:133
SolidModel::_elastic_strain_old
const MaterialProperty< SymmTensor > & _elastic_strain_old
Definition: SolidModel.h:120
SolidModel::_crack_max_strain_old
const MaterialProperty< RealVectorValue > * _crack_max_strain_old
Definition: SolidModel.h:132
SolidModel::CR_UNKNOWN
Definition: SolidModel.h:52
SolidModel::_has_temp
const bool _has_temp
Definition: SolidModel.h:93
SolidModel::_poissons_ratio_set
bool _poissons_ratio_set
Definition: SolidModel.h:66
SolidModel::_crack_count_old
const MaterialProperty< RealVectorValue > * _crack_count_old
Definition: SolidModel.h:126
validParams< SolidModel >
InputParameters validParams< SolidModel >()
Definition: SolidModel.C:31
SolidModel::_stress
MaterialProperty< SymmTensor > & _stress
Definition: SolidModel.h:108
SolidModel::rotateSymmetricTensor
static void rotateSymmetricTensor(const ColumnMajorMatrix &R, const SymmTensor &T, SymmTensor &result)
Definition: SolidModel.C:663
SolidModel::_cracking_neg_fraction
const Real _cracking_neg_fraction
Definition: SolidModel.h:89
SolidModel::initQpStatefulProperties
virtual void initQpStatefulProperties()
Definition: SolidModel.C:696
SolidModel::computePreconditioning
virtual void computePreconditioning()
Definition: SolidModel.C:944
SolidModel::_lambda
Real _lambda
Definition: SolidModel.h:71
SolidModel::_ref_temp
Real _ref_temp
Definition: SolidModel.h:103
SolidModel::_stress_old
SymmTensor _stress_old
Definition: SolidModel.h:114
SolidModel::timestepSetup
virtual void timestepSetup()
Definition: SolidModel.C:522
SolidModel::computeCrackStrainAndOrientation
void computeCrackStrainAndOrientation(ColumnMajorMatrix &principal_strain)
Definition: SolidModel.C:1152
SolidModel::_elastic_strain
MaterialProperty< SymmTensor > & _elastic_strain
Definition: SolidModel.h:119
SolidModel::_alpha
const Real _alpha
Definition: SolidModel.h:97
SolidModel::SolidModel
SolidModel(const InputParameters &parameters)
Definition: SolidModel.C:140
SolidModel::qrule
const QBase * qrule()
Definition: SolidModel.h:55
SolidModel::computeElasticityTensor
void computeElasticityTensor()
Definition: SolidModel.C:865
SolidModel::checkElasticConstants
virtual void checkElasticConstants()
Definition: SolidModel.C:377
SolidModel::_poissons_ratio_function
const Function * _poissons_ratio_function
Definition: SolidModel.h:77
SolidModel::_stress_free_temp
Real _stress_free_temp
Definition: SolidModel.h:101
SolidModel::createConstitutiveModel
void createConstitutiveModel(const std::string &cm_name)
Definition: SolidModel.C:1591
SolidModel::element
const SolidMechanics::Element * element() const
Definition: SolidModel.h:226
SolidModel::_cracking_residual_stress
const Real _cracking_residual_stress
Definition: SolidModel.h:81
SolidModel::JxW
Real JxW(unsigned i) const
Definition: SolidModel.h:57