forked from idaholab/blackbear
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
adding damage plasticity model for concrete ref idaholab#184
- Loading branch information
Showing
39 changed files
with
6,739 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 21 additions & 0 deletions
21
doc/content/source/materials/ComputeMultipleInelasticDamageStress.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# Compute Multiple Inelastic Damage Stress | ||
|
||
!syntax description /Materials/ComputeMultipleInelasticDamageStress | ||
|
||
## Description | ||
|
||
`ComputeMultipleInelasticDamageStress` computes the damage stress. | ||
|
||
## Example Input Files | ||
|
||
The input settings for the inelastic material model is as follows | ||
|
||
!listing test/tests/plastic_damage_model/uni_ten.i block=Materials/stress | ||
|
||
!syntax parameters /Materials/ComputeMultipleInelasticDamageStress | ||
|
||
!syntax inputs /Materials/ComputeMultipleInelasticDamageStress | ||
|
||
!syntax children /Materials/ComputeMultipleInelasticDamageStress | ||
|
||
!bibtex bibliography |
346 changes: 346 additions & 0 deletions
346
doc/content/source/materials/DamagePlasticityStressUpdate.md
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
/****************************************************************/ | ||
/* DO NOT MODIFY THIS HEADER */ | ||
/* BlackBear */ | ||
/* */ | ||
/* (c) 2017 Battelle Energy Alliance, LLC */ | ||
/* ALL RIGHTS RESERVED */ | ||
/* */ | ||
/* Prepared by Battelle Energy Alliance, LLC */ | ||
/* Under Contract No. DE-AC07-05ID14517 */ | ||
/* With the U. S. Department of Energy */ | ||
/* */ | ||
/* See COPYRIGHT for full restrictions */ | ||
/****************************************************************/ | ||
|
||
#pragma once | ||
|
||
#include "ComputeMultipleInelasticStress.h" | ||
|
||
class ComputeMultipleInelasticDamageStress : public ComputeMultipleInelasticStress | ||
{ | ||
public: | ||
static InputParameters validParams(); | ||
ComputeMultipleInelasticDamageStress(const InputParameters & parameters); | ||
|
||
protected: | ||
/// damage parameter for DamagePlasticityStressUpdate model | ||
const MaterialProperty<Real> & _D; | ||
const MaterialProperty<Real> & _D_old; | ||
const MaterialProperty<Real> & _D_older; | ||
|
||
virtual void computeQpJacobianMult() override; | ||
|
||
virtual void computeAdmissibleState(unsigned model_number, | ||
RankTwoTensor & elastic_strain_increment, | ||
RankTwoTensor & inelastic_strain_increment, | ||
RankFourTensor & consistent_tangent_operator) override; | ||
|
||
virtual void | ||
updateQpStateSingleModel(unsigned model_number, | ||
RankTwoTensor & elastic_strain_increment, | ||
RankTwoTensor & combined_inelastic_strain_increment) override; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,184 @@ | ||
/****************************************************************/ | ||
/* DO NOT MODIFY THIS HEADER */ | ||
/* BlackBear */ | ||
/* */ | ||
/* (c) 2017 Battelle Energy Alliance, LLC */ | ||
/* ALL RIGHTS RESERVED */ | ||
/* */ | ||
/* Prepared by Battelle Energy Alliance, LLC */ | ||
/* Under Contract No. DE-AC07-05ID14517 */ | ||
/* With the U. S. Department of Energy */ | ||
/* */ | ||
/* See COPYRIGHT for full restrictions */ | ||
/****************************************************************/ | ||
|
||
#pragma once | ||
|
||
#include "MultiParameterPlasticityStressUpdate.h" | ||
|
||
class DamagePlasticityStressUpdate : public MultiParameterPlasticityStressUpdate | ||
{ | ||
public: | ||
static InputParameters validParams(); | ||
DamagePlasticityStressUpdate(const InputParameters & parameters); | ||
|
||
/** | ||
* Does the model require the elasticity tensor to be isotropic? | ||
*/ | ||
bool requiresIsotropicTensor() override { return true; } | ||
|
||
protected: | ||
virtual void initQpStatefulProperties() override; | ||
virtual void finalizeReturnProcess(const RankTwoTensor & rotation_increment) override; | ||
|
||
private: | ||
const Real _f_tol; | ||
const Real _alfa; | ||
const Real _alfa_p; | ||
const Real _s0; | ||
|
||
const Real _Chi; | ||
const Real _Dt; | ||
const Real _ft; | ||
const Real _FEt; | ||
|
||
const Real _fyc; | ||
const Real _Dc; | ||
const Real _fc; | ||
const Real _FEc; | ||
|
||
const Real _at; | ||
const Real _ac; | ||
const Real _zt; | ||
const Real _zc; | ||
const Real _dPhit; | ||
const Real _dPhic; | ||
const Real _sqrtPhit_max; | ||
const Real _sqrtPhic_max; | ||
const Real _dt_bt; | ||
const Real _dc_bc; | ||
const Real _ft0; | ||
const Real _fc0; | ||
const Real _small_smoother2; | ||
|
||
const Real _sqrt3; | ||
|
||
/// Whether to provide an estimate of the returned stress, based on perfect plasticity | ||
const bool _perfect_guess; | ||
|
||
/// Eigenvectors of the trial stress as a RankTwoTensor, in order to rotate the returned stress back to stress space | ||
RankTwoTensor _eigvecs; | ||
|
||
MaterialProperty<Real> & _max_principal; | ||
MaterialProperty<Real> & _min_principal; | ||
MaterialProperty<Real> & _intnl0; | ||
MaterialProperty<Real> & _intnl1; | ||
MaterialProperty<Real> & _ele_len; | ||
MaterialProperty<Real> & _gt; | ||
MaterialProperty<Real> & _gc; | ||
|
||
MaterialProperty<Real> & _tD; | ||
MaterialProperty<Real> & _cD; | ||
MaterialProperty<Real> & _D; | ||
MaterialProperty<Real> & _min_ep; | ||
MaterialProperty<Real> & _mid_ep; | ||
MaterialProperty<Real> & _max_ep; | ||
MaterialProperty<Real> & _sigma0; | ||
MaterialProperty<Real> & _sigma1; | ||
MaterialProperty<Real> & _sigma2; | ||
|
||
Real ft(const std::vector<Real> & intnl) const; /// tensile strength | ||
Real dft(const std::vector<Real> & intnl) const; /// d(tensile strength)/d(intnl) | ||
Real fc(const std::vector<Real> & intnl) const; /// compressive strength | ||
Real dfc(const std::vector<Real> & intnl) const; /// d(compressive strength)/d(intnl) | ||
Real beta(const std::vector<Real> & intnl) const; | ||
Real dbeta0(const std::vector<Real> & intnl) const; | ||
Real dbeta1(const std::vector<Real> & intnl) const; | ||
void weighfac(const std::vector<Real> & stress_params, Real & wf) const; /// weight factor | ||
void dweighfac(const std::vector<Real> & stress_params, | ||
Real & wf, | ||
std::vector<Real> & dwf) const; /// d(weight factor)/d(stress) | ||
Real damageVar(const std::vector<Real> & stress_params, const std::vector<Real> & intnl) const; | ||
|
||
void computeStressParams(const RankTwoTensor & stress, | ||
std::vector<Real> & stress_params) const override; | ||
|
||
std::vector<RankTwoTensor> dstress_param_dstress(const RankTwoTensor & stress) const override; | ||
|
||
std::vector<RankFourTensor> d2stress_param_dstress(const RankTwoTensor & stress) const override; | ||
|
||
void setEffectiveElasticity(const RankFourTensor & Eijkl) override; | ||
|
||
virtual void preReturnMapV(const std::vector<Real> & trial_stress_params, | ||
const RankTwoTensor & stress_trial, | ||
const std::vector<Real> & intnl_old, | ||
const std::vector<Real> & yf, | ||
const RankFourTensor & Eijkl) override; | ||
|
||
virtual void setStressAfterReturnV(const RankTwoTensor & stress_trial, | ||
const std::vector<Real> & stress_params, | ||
Real gaE, | ||
const std::vector<Real> & intnl, | ||
const yieldAndFlow & smoothed_q, | ||
const RankFourTensor & Eijkl, | ||
RankTwoTensor & stress) const override; | ||
|
||
void yieldFunctionValuesV(const std::vector<Real> & stress_params, | ||
const std::vector<Real> & intnl, | ||
std::vector<Real> & yf) const override; | ||
|
||
void computeAllQV(const std::vector<Real> & stress_params, | ||
const std::vector<Real> & intnl, | ||
std::vector<yieldAndFlow> & all_q) const override; | ||
|
||
virtual void flowPotential(const std::vector<Real> & stress_params, | ||
const std::vector<Real> & intnl, | ||
std::vector<Real> & r) const; | ||
|
||
virtual void dflowPotential_dstress(const std::vector<Real> & stress_params, | ||
const std::vector<Real> & intnl, | ||
std::vector<std::vector<Real>> & dr_dstress) const; | ||
|
||
virtual void dflowPotential_dintnl(const std::vector<Real> & stress_params, | ||
const std::vector<Real> & intnl, | ||
std::vector<std::vector<Real>> & dr_dintnl) const; | ||
|
||
virtual void hardPotential(const std::vector<Real> & stress_params, | ||
const std::vector<Real> & intnl, | ||
std::vector<Real> & h) const; | ||
|
||
virtual void dhardPotential_dstress(const std::vector<Real> & stress_params, | ||
const std::vector<Real> & intnl, | ||
std::vector<std::vector<Real>> & dh_dsig) const; | ||
|
||
virtual void dhardPotential_dintnl(const std::vector<Real> & stress_params, | ||
const std::vector<Real> & intnl, | ||
std::vector<std::vector<Real>> & dh_dintnl) const; | ||
|
||
void initialiseVarsV(const std::vector<Real> & trial_stress_params, | ||
const std::vector<Real> & intnl_old, | ||
std::vector<Real> & stress_params, | ||
Real & gaE, | ||
std::vector<Real> & intnl) const; | ||
|
||
void setIntnlValuesV(const std::vector<Real> & trial_stress_params, | ||
const std::vector<Real> & current_stress_params, | ||
const std::vector<Real> & intnl_old, | ||
std::vector<Real> & intnl) const override; | ||
|
||
void setIntnlDerivativesV(const std::vector<Real> & trial_stress_params, | ||
const std::vector<Real> & current_stress_params, | ||
const std::vector<Real> & intnl, | ||
std::vector<std::vector<Real>> & dintnl) const override; | ||
|
||
virtual void consistentTangentOperatorV(const RankTwoTensor & stress_trial, | ||
const std::vector<Real> & trial_stress_params, | ||
const RankTwoTensor & stress, | ||
const std::vector<Real> & stress_params, | ||
Real gaE, | ||
const yieldAndFlow & smoothed_q, | ||
const RankFourTensor & Eijkl, | ||
bool compute_full_tangent_operator, | ||
const std::vector<std::vector<Real>> & dvar_dtrial, | ||
RankFourTensor & cto) override; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/****************************************************************/ | ||
/* DO NOT MODIFY THIS HEADER */ | ||
/* BlackBear */ | ||
/* */ | ||
/* (c) 2017 Battelle Energy Alliance, LLC */ | ||
/* ALL RIGHTS RESERVED */ | ||
/* */ | ||
/* Prepared by Battelle Energy Alliance, LLC */ | ||
/* Under Contract No. DE-AC07-05ID14517 */ | ||
/* With the U. S. Department of Energy */ | ||
/* */ | ||
/* See COPYRIGHT for full restrictions */ | ||
/****************************************************************/ | ||
|
||
#include "ComputeMultipleInelasticDamageStress.h" | ||
#include "StressUpdateBase.h" | ||
|
||
registerMooseObject("BlackBearApp", ComputeMultipleInelasticDamageStress); | ||
|
||
InputParameters | ||
ComputeMultipleInelasticDamageStress::validParams() | ||
{ | ||
InputParameters params = ComputeMultipleInelasticStress::validParams(); | ||
return params; | ||
} | ||
|
||
ComputeMultipleInelasticDamageStress::ComputeMultipleInelasticDamageStress( | ||
const InputParameters & parameters) | ||
: ComputeMultipleInelasticStress(parameters), | ||
_D(getMaterialProperty<Real>("elemental_damage_variable")), | ||
_D_old(getMaterialPropertyOld<Real>("elemental_damage_variable")), | ||
_D_older(getMaterialPropertyOlder<Real>("elemental_damage_variable")) | ||
{ | ||
} | ||
|
||
void | ||
ComputeMultipleInelasticDamageStress::computeQpJacobianMult() | ||
{ | ||
ComputeMultipleInelasticStress::computeQpJacobianMult(); | ||
_Jacobian_mult[_qp] = (1.0 - _D_older[_qp]) * _Jacobian_mult[_qp]; | ||
// _Jacobian_mult[_qp] = (1.0 - _D[_qp]) * _Jacobian_mult[_qp]; | ||
} | ||
|
||
void | ||
ComputeMultipleInelasticDamageStress::updateQpStateSingleModel( | ||
unsigned model_number, | ||
RankTwoTensor & elastic_strain_increment, | ||
RankTwoTensor & combined_inelastic_strain_increment) | ||
{ | ||
ComputeMultipleInelasticStress::updateQpStateSingleModel( | ||
model_number, elastic_strain_increment, combined_inelastic_strain_increment); | ||
_Jacobian_mult[_qp] = (1.0 - _D_older[_qp]) * _Jacobian_mult[_qp]; | ||
} | ||
|
||
void | ||
ComputeMultipleInelasticDamageStress::computeAdmissibleState( | ||
unsigned model_number, | ||
RankTwoTensor & elastic_strain_increment, | ||
RankTwoTensor & inelastic_strain_increment, | ||
RankFourTensor & consistent_tangent_operator) | ||
{ | ||
_models[model_number]->updateState(elastic_strain_increment, | ||
inelastic_strain_increment, | ||
_rotation_increment[_qp], | ||
_stress[_qp], | ||
_stress_old[_qp] / (1.0 - _D_older[_qp]), | ||
// _stress_old[_qp] / (1.0 - _D[_qp]), | ||
_elasticity_tensor[_qp], | ||
_elastic_strain_old[_qp], | ||
_tangent_operator_type == TangentOperatorEnum::nonlinear, | ||
consistent_tangent_operator); | ||
_stress[_qp] *= (1.0 - _D_older[_qp]); | ||
} |
Oops, something went wrong.