Skip to content

Commit

Permalink
[MatL] Use initial stress to fracture models.
Browse files Browse the repository at this point in the history
  • Loading branch information
endJunction committed Oct 16, 2017
1 parent d9549d9 commit bc3611e
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 76 deletions.
27 changes: 17 additions & 10 deletions MaterialLib/FractureModels/FractureModelBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ class FractureModelBase
* @param t current time
* @param x current position in space
* @param aperture0 initial fracture's aperture
* @param sigma0 initial stress
* @param w_prev fracture displacement at previous time step
* @param w fracture displacement at current time step
* @param sigma_prev stress at previous time step
Expand All @@ -75,16 +76,22 @@ class FractureModelBase
* @param material_state_variables material state variables
*/
virtual void computeConstitutiveRelation(
double const t,
ProcessLib::SpatialPosition const& x,
double const aperture0,
Eigen::Ref<Eigen::VectorXd const> w_prev,
Eigen::Ref<Eigen::VectorXd const> w,
Eigen::Ref<Eigen::VectorXd const> sigma_prev,
Eigen::Ref<Eigen::VectorXd> sigma,
Eigen::Ref<Eigen::MatrixXd> C,
MaterialStateVariables& material_state_variables) = 0;

double const t,
ProcessLib::SpatialPosition const& x,
double const aperture0,
Eigen::Ref<Eigen::VectorXd const>
sigma0,
Eigen::Ref<Eigen::VectorXd const>
w_prev,
Eigen::Ref<Eigen::VectorXd const>
w,
Eigen::Ref<Eigen::VectorXd const>
sigma_prev,
Eigen::Ref<Eigen::VectorXd>
sigma,
Eigen::Ref<Eigen::MatrixXd>
C,
MaterialStateVariables& material_state_variables) = 0;
};

} // namespace Fracture
Expand Down
29 changes: 17 additions & 12 deletions MaterialLib/FractureModels/LinearElasticIsotropic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,24 @@ namespace MaterialLib
{
namespace Fracture
{

template <int DisplacementDim>
void LinearElasticIsotropic<DisplacementDim>::computeConstitutiveRelation(
double const t,
ProcessLib::SpatialPosition const& x,
double const aperture0,
Eigen::Ref<Eigen::VectorXd const> w_prev,
Eigen::Ref<Eigen::VectorXd const> w,
Eigen::Ref<Eigen::VectorXd const> sigma_prev,
Eigen::Ref<Eigen::VectorXd> sigma,
Eigen::Ref<Eigen::MatrixXd> C,
typename FractureModelBase<DisplacementDim>::MaterialStateVariables&
double const t,
ProcessLib::SpatialPosition const& x,
double const aperture0,
Eigen::Ref<Eigen::VectorXd const>
sigma0,
Eigen::Ref<Eigen::VectorXd const>
/*w_prev*/,
Eigen::Ref<Eigen::VectorXd const>
w,
Eigen::Ref<Eigen::VectorXd const>
/*sigma_prev*/,
Eigen::Ref<Eigen::VectorXd>
sigma,
Eigen::Ref<Eigen::MatrixXd>
C,
typename FractureModelBase<DisplacementDim>::MaterialStateVariables&
material_state_variables)
{
material_state_variables.reset();
Expand All @@ -48,8 +54,7 @@ void LinearElasticIsotropic<DisplacementDim>::computeConstitutiveRelation(
_mp.normal_stiffness(t, x)[0] *
logPenaltyDerivative(aperture0, aperture, _penalty_aperture_cutoff);

// TODO (naumov) after correct init sigma is passed.
// sigma += sigma0;
sigma.noalias() += sigma0;

// correction for an opening fracture
if (_tension_cutoff && sigma[index_ns] > 0)
Expand Down
26 changes: 17 additions & 9 deletions MaterialLib/FractureModels/LinearElasticIsotropic.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ class LinearElasticIsotropic final : public FractureModelBase<DisplacementDim>
* @param t current time
* @param x current position in space
* @param aperture0 initial fracture's aperture
* @param sigma0 initial stress
* @param w_prev fracture displacement at previous time step
* @param w fracture displacement at current time step
* @param sigma_prev stress at previous time step
Expand All @@ -79,15 +80,22 @@ class LinearElasticIsotropic final : public FractureModelBase<DisplacementDim>
* @param material_state_variables material state variables
*/
void computeConstitutiveRelation(
double const t,
ProcessLib::SpatialPosition const& x,
double const aperture0,
Eigen::Ref<Eigen::VectorXd const> w_prev,
Eigen::Ref<Eigen::VectorXd const> w,
Eigen::Ref<Eigen::VectorXd const> sigma_prev,
Eigen::Ref<Eigen::VectorXd> sigma,
Eigen::Ref<Eigen::MatrixXd> C,
typename FractureModelBase<DisplacementDim>::MaterialStateVariables&
double const t,
ProcessLib::SpatialPosition const& x,
double const aperture0,
Eigen::Ref<Eigen::VectorXd const>
sigma0,
Eigen::Ref<Eigen::VectorXd const>
w_prev,
Eigen::Ref<Eigen::VectorXd const>
w,
Eigen::Ref<Eigen::VectorXd const>
sigma_prev,
Eigen::Ref<Eigen::VectorXd>
sigma,
Eigen::Ref<Eigen::MatrixXd>
C,
typename FractureModelBase<DisplacementDim>::MaterialStateVariables&
material_state_variables) override;

private:
Expand Down
33 changes: 23 additions & 10 deletions MaterialLib/FractureModels/MohrCoulomb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,22 @@ struct MaterialPropertyValues

template <int DisplacementDim>
void MohrCoulomb<DisplacementDim>::computeConstitutiveRelation(
double const t,
ProcessLib::SpatialPosition const& x,
double const aperture0,
Eigen::Ref<Eigen::VectorXd const> w_prev,
Eigen::Ref<Eigen::VectorXd const> w,
Eigen::Ref<Eigen::VectorXd const> sigma_prev,
Eigen::Ref<Eigen::VectorXd> sigma,
Eigen::Ref<Eigen::MatrixXd> Kep,
typename FractureModelBase<DisplacementDim>::MaterialStateVariables&
double const t,
ProcessLib::SpatialPosition const& x,
double const aperture0,
Eigen::Ref<Eigen::VectorXd const>
sigma0,
Eigen::Ref<Eigen::VectorXd const>
w_prev,
Eigen::Ref<Eigen::VectorXd const>
w,
Eigen::Ref<Eigen::VectorXd const>
sigma_prev,
Eigen::Ref<Eigen::VectorXd>
sigma,
Eigen::Ref<Eigen::MatrixXd>
Kep,
typename FractureModelBase<DisplacementDim>::MaterialStateVariables&
material_state_variables)
{
material_state_variables.reset();
Expand Down Expand Up @@ -90,7 +97,11 @@ void MohrCoulomb<DisplacementDim>::computeConstitutiveRelation(
}

// Total plastic aperture compression
Eigen::VectorXd const w_p_prev = Ke_prev.fullPivLu().solve(sigma_prev);
// NOTE: Initial condition sigma0 seems to be associated with an initial
// condition of the w0 = 0. Therefore the initial state is not associated
// with a plastic aperture change.
Eigen::VectorXd const w_p_prev =
w_prev - Ke_prev.fullPivLu().solve(sigma_prev - sigma0);

{ // Exact elastic predictor
sigma.noalias() = Ke * (w - w_p_prev);
Expand All @@ -100,6 +111,8 @@ void MohrCoulomb<DisplacementDim>::computeConstitutiveRelation(
logPenalty(aperture0, aperture, _penalty_aperture_cutoff);
}

sigma.noalias() += sigma0;

double const sigma_n = sigma[index_ns];

// correction for an opening fracture
Expand Down
26 changes: 17 additions & 9 deletions MaterialLib/FractureModels/MohrCoulomb.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ class MohrCoulomb final : public FractureModelBase<DisplacementDim>
* @param t current time
* @param x current position in space
* @param aperture0 initial fracture's aperture
* @param sigma0 initial stress
* @param w_prev fracture displacement at previous time step
* @param w fracture displacement at current time step
* @param sigma_prev stress at previous time step
Expand All @@ -88,15 +89,22 @@ class MohrCoulomb final : public FractureModelBase<DisplacementDim>
* @param material_state_variables material state variables
*/
void computeConstitutiveRelation(
double const t,
ProcessLib::SpatialPosition const& x,
double const aperture0,
Eigen::Ref<Eigen::VectorXd const> w_prev,
Eigen::Ref<Eigen::VectorXd const> w,
Eigen::Ref<Eigen::VectorXd const> sigma_prev,
Eigen::Ref<Eigen::VectorXd> sigma,
Eigen::Ref<Eigen::MatrixXd> Kep,
typename FractureModelBase<DisplacementDim>::MaterialStateVariables&
double const t,
ProcessLib::SpatialPosition const& x,
double const aperture0,
Eigen::Ref<Eigen::VectorXd const>
sigma0,
Eigen::Ref<Eigen::VectorXd const>
w_prev,
Eigen::Ref<Eigen::VectorXd const>
w,
Eigen::Ref<Eigen::VectorXd const>
sigma_prev,
Eigen::Ref<Eigen::VectorXd>
sigma,
Eigen::Ref<Eigen::MatrixXd>
Kep,
typename FractureModelBase<DisplacementDim>::MaterialStateVariables&
material_state_variables) override;

private:
Expand Down
Loading

0 comments on commit bc3611e

Please sign in to comment.