Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add LDLNucleationMicroForce with tests in surfing #159

Merged
merged 4 commits into from
Apr 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion doc/content/bib/raccoon.bib
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ @article{bourdin2007numerical
year={2007}
}

@Article{Kumar2022,
@Article{Kumar2022,
author={Kumar, A.
and Ravi-Chandar, K.
and Lopez-Pamies, O.},
Expand Down Expand Up @@ -53,3 +53,11 @@ @article{Drucker-Prager
volume = {10},
year = {1952}
}

@article{larsen2024,
title={A variational formulation of Griffith phase-field fracture with material strength},
author={C. J. Larsen and J. E. Dolbow and O. Lopez-Pamies},
journal = {Arxiv},
year={2024},
url={https://arxiv.org/abs/2401.13938},
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ In general, model KLR published in [!cite](Kumar2022) is recommended over model

### KLR (Kumar, Lopez, Ravi-Chandar) Model 2022

Please see [KLRNucleationMicroForce](source/materials/KLRNucleationMicroForce.md)
Please see [KLRNucleationMicroForce](nucleation_models/KLRNucleationMicroForce.md)

### KLBF (Kumar, Lopez, Bourdin, Francfort) Model 2020

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,9 @@ l_e = \frac{l_0}{\sqrt{1+\delta}},\quad (\delta > -1)

could deviate from $\ell$. The mesh should be able to resolve $l_e$ as well.

Here is an example input deck

!listing /tutorials/surfing_boundary_problem/fracture.i block=Materials/kumar_material

### KLBF (Kumar, Lopez, Bourdin, Francfort) Model 2020

See [KLBFNucleationMicroForce](source/materials/KLBFNucleationMicroForce.md)
See [KLBFNucleationMicroForce](nucleation_models/KLBFNucleationMicroForce.md)

## Example Input File Syntax

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# LDLNucleationMicroForce

!syntax description /Materials/LDLNucleationMicroForce

See *A variational formulation of Griffith phase-field fracture with material strength* by [!cite](larsen2024)

This is a variational recast of the phase-field fracture formulation put forth by Kumar, Francfort and Lopez-Pamies (2018), where $\delta$ is explicitly evaluated.

## Overview

### LDL (Larsen, Dolbow, Lopez) Model 2024

The fracture functional reads

\begin{equation}
\mathcal{E}_f^l(\boldsymbol{u}, d):= \int_\Omega g(d) \psi_e(\boldsymbol{\varepsilon}(\boldsymbol{u})) \;\mathrm{dV} + \frac{\delta^l G_c}{c_0}\int_\Omega\left(\frac{\alpha(d)}{l} + l\nabla d\cdot \nabla d\right) \;\mathrm{dV} + \int_\Omega\left(\int_0^1 g(d) \;\mathrm{dd}\right)\widehat{c_e}(\boldsymbol{\varepsilon}(\boldsymbol{u})) \;\mathrm{dV}.
\end{equation}

The governing equation for fracture is
\begin{equation}
-\nabla\cdot \dfrac{2 G_c l \delta^l}{c_0}\nabla d + \dfrac{\partial}{\partial d}\left( \alpha \dfrac{\delta^l G_c}{c_0 l} - g(d)\psi_e\right) - g(d)\widehat{c_e} \ge 0.
\end{equation}

Note that the following derivation follows settings of `AT-1`, i.e., $\alpha(d)=d$ and $c_0=\dfrac{8}{3}$. In this model, the strict irreversibility condition for $d$ is adopted.

The "undamaged" nucleation driving force is defined as
\begin{equation}
\widehat{c_e}(\boldsymbol{\varepsilon}(\boldsymbol{u}))= \alpha_2 \sqrt{J_2} + \alpha_1 I_1 - (1-d)\left(1 - \dfrac{\sqrt{I_1^2}}{I_1}\right)\psi_e.
\end{equation}

In this recast, $\delta^l$ is evaluated explicitly as
\begin{equation}
\text{without h correction:}\quad\delta^l=\left(\frac{\sigma_{ts}+ (1+2\sqrt{3})\sigma_{hs}}{(8+3\sqrt{3})\sigma_{hs}}\right)\frac{3G_c}{16 \psi_{ts} l} + \frac{3}{8},
\end{equation}

\begin{equation}
\text{with h correction:}\quad\delta^l=\left(1+\frac{3 h}{8 l}\right)^{-2}\left(\frac{\sigma_{ts}+(1+2\sqrt{3})\sigma_{hs}}{(8+3\sqrt{3})\sigma_{hs}}\right)\frac{3G_c}{16 \psi_{ts} l} + \left(1 + \frac{3h}{8l}\right)^{-1}\frac{2}{5},
\end{equation}

where
\begin{equation}
\alpha_1 = - \frac{1}{\sigma_{hs}}\delta^l \frac{G_c}{8l} + \frac{2\psi_{hs}}{3\sigma_{hs}}, \qquad \alpha_2= - \frac{\sqrt{3}(3\sigma_{hs} - \sigma_{ts})}{\sigma_{hs}\sigma_{ts}}\delta^l \frac{G_c}{8l} - \frac{2\psi_{hs}}{\sqrt{3}\sigma_{hs}} + \frac{2\sqrt{3}\psi_{ts}}{\sigma_{ts}},
\end{equation}

with
\begin{equation}
\psi_{ts}=\frac{\sigma^2_{ts}}{2E}, \quad \psi_{hs}=\frac{\sigma^2_{hs}}{2\kappa}.
\end{equation}

The material properties used are the bulk modulus $\kappa$ and Young's modulus $E$ and the shear modulus $\mu$.

The strength surface is presented with uniaxial tensile $\sigma_{ts}$ and hydrostatic strength $\sigma_{hs}$, where $\sigma_{hs}=\dfrac{2}{3} \dfrac{\sigma_{ts}\sigma_{cs}}{\sigma_{cs} - \sigma_{ts}}$.

### KLR (Kumar, Lopez, Ravi-Chandar) Model 2022

Please see [KLRNucleationMicroForce](nucleation_models/KLRNucleationMicroForce.md)

### KLBF (Kumar, Lopez, Bourdin, Francfort) Model 2020

Please see [KLBFNucleationMicroForce](nucleation_models/KLBFNucleationMicroForce.md)

## Example Input File Syntax

```
[Materials]
[micro_force]
type = LDLNucleationMicroForce
regularization_length = l
normalization_constant = c0
tensile_strength = sigma_ts
hydrostatic_strength = sigma_hs
external_driving_force_name = ce
h_correction = true
[]
[]
```

!syntax parameters /Materials/LDLNucleationMicroForce

!syntax inputs /Materials/LDLNucleationMicroForce

!syntax children /Materials/LDLNucleationMicroForce
77 changes: 0 additions & 77 deletions include/materials/KLRNucleationMicroForce.h

This file was deleted.

31 changes: 31 additions & 0 deletions include/materials/nucleation_models/KLBFNucleationMicroForce.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//* This file is part of the RACCOON application
//* being developed at Dolbow lab at Duke University
//* http://dolbow.pratt.duke.edu

#pragma once

#include "NucleationMicroForceBase.h"

/**
* The class implements the external driving force to recover a Drucker-Prager
* strength envelope. See Kumar et. al. https://doi.org/10.1016/j.jmps.2020.104027 for model 2020.
*/
class KLBFNucleationMicroForce : public NucleationMicroForceBase
{
public:
static InputParameters validParams();

KLBFNucleationMicroForce(const InputParameters & parameters);

protected:
virtual void computeQpProperties() override;

/// The critical tensile strength
const ADMaterialProperty<Real> & _sigma_ts;

/// The critical compressive strength
const ADMaterialProperty<Real> & _sigma_cs;

/// The materiel and model dependent parameter
const ADMaterialProperty<Real> & _delta;
};
37 changes: 37 additions & 0 deletions include/materials/nucleation_models/KLRNucleationMicroForce.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//* This file is part of the RACCOON application
//* being developed at Dolbow lab at Duke University
//* http://dolbow.pratt.duke.edu

#pragma once

#include "NucleationMicroForceBase.h"

/**
* The class implements the external driving force to recover a Drucker-Prager
* strength envelope developed by Kumar et al. in 2022. See Kumar, A., Ravi-Chandar, K. &
* Lopez-Pamies, O. The revisited phase-field approach to brittle fracture: application to
* indentation and notch problems. Int J Fract 237, 83–100 (2022).
* https://doi.org/10.1007/s10704-022-00653-z.
*/
class KLRNucleationMicroForce : public NucleationMicroForceBase
{
public:
static InputParameters validParams();

KLRNucleationMicroForce(const InputParameters & parameters);

protected:
virtual void computeQpProperties() override;

/// The critical tensile strength
const ADMaterialProperty<Real> & _sigma_ts;

/// The critical compressive strength
const ADMaterialProperty<Real> & _sigma_cs;

/// The materiel and model dependent parameter
const ADMaterialProperty<Real> & _delta;

/// Quantifying how far is the stress state from Drucker Prager
ADMaterialProperty<Real> & _druck_prager_balance;
};
35 changes: 35 additions & 0 deletions include/materials/nucleation_models/LDLNucleationMicroForce.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
//* This file is part of the RACCOON application
//* being developed at Dolbow lab at Duke University
//* http://dolbow.pratt.duke.edu

#pragma once

#include "NucleationMicroForceBase.h"

/**
* The class implements the external driving force to recover a Drucker-Prager
* strength envelope. See Larsen et. al. https://doi.org/10.48550/arXiv.2401.13938 for model 2024.
*/

class LDLNucleationMicroForce : public NucleationMicroForceBase
{
public:
static InputParameters validParams();

LDLNucleationMicroForce(const InputParameters & parameters);

protected:
virtual void computeQpProperties() override;

/// The critical tensile strength
const ADMaterialProperty<Real> & _sigma_ts;

/// The critical hydrostatic strength
const ADMaterialProperty<Real> & _sigma_hs;

/// The materiel and model dependent parameter
ADMaterialProperty<Real> & _delta;

/// Whether to use h correction formula for delta
bool _h_correction;
};
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,16 @@
#include "BaseNameInterface.h"
#include "DerivativeMaterialPropertyNameInterface.h"

/**
* The class implements the external driving force to recover a Drucker-Prager
* strength envelope. See Kumar et. al. https://doi.org/10.1016/j.jmps.2020.104027 for model 2020.
* all parameters are required to be Material type, not double type
*/
class KLBFNucleationMicroForce : public Material,
class NucleationMicroForceBase : public Material,
public BaseNameInterface,
public DerivativeMaterialPropertyNameInterface
{
public:
static InputParameters validParams();

KLBFNucleationMicroForce(const InputParameters & parameters);
NucleationMicroForceBase(const InputParameters & parameters);

protected:
virtual void computeQpProperties() override;

/// Name of the external driving force
const MaterialPropertyName _ex_driving_name;

/// The external driving force
ADMaterialProperty<Real> & _ex_driving;

///@{ Phase field properties
///@{ fracture properties
/// The fracture toughness
const ADMaterialProperty<Real> & _Gc;
/// The normalization constant
Expand All @@ -45,20 +31,22 @@ class KLBFNucleationMicroForce : public Material,
/// The shear modulus
const ADMaterialProperty<Real> & _mu;

/// The critical tensile strength
const ADMaterialProperty<Real> & _sigma_ts;

/// The critical compressive strength
const ADMaterialProperty<Real> & _sigma_cs;

/// The materiel and model dependent parameter
const ADMaterialProperty<Real> & _delta;

/// The stress tensor
const ADMaterialProperty<RankTwoTensor> & _stress;

/// Name of the stress space balance
const MaterialPropertyName _stress_balance_name;
/// Quantifying how far is the stress state from stress surface
ADMaterialProperty<Real> & _stress_balance;

/// Name of the external driving force
const MaterialPropertyName _ex_driving_name;
/// The external nucleation driving force
ADMaterialProperty<Real> & _ex_driving;

/// @{ The degradation function and its derivative w/r/t damage
const VariableName _d_name;
const MaterialPropertyName _g_name;
const ADMaterialProperty<Real> & _g;
const ADMaterialProperty<Real> & _dg_dd;
/// @}
};
Loading
Loading