Skip to content

Commit

Permalink
add LDLNucleationMicroForce with tests in surfing (#159)
Browse files Browse the repository at this point in the history
* Add LDLNucleationMicroForce
* Modify surfing tutorial

close #158


---------

Co-authored-by: Gary Hu <[email protected]>
  • Loading branch information
lyyc199586 and hugary1995 authored Apr 24, 2024
1 parent 1e3a38e commit 202c2a7
Show file tree
Hide file tree
Showing 18 changed files with 402 additions and 215 deletions.
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

0 comments on commit 202c2a7

Please sign in to comment.