Commit 61c45225 authored by Antoine Jacquey's avatar Antoine Jacquey

Initial commit of the master branch of LYNX.

parent 746ff954
...@@ -11,10 +11,26 @@ Content: ...@@ -11,10 +11,26 @@ Content:
Renderer: Renderer:
type: MooseDocs.base.MaterializeRenderer type: MooseDocs.base.MaterializeRenderer
name: Lynx name: LYNX
repo: https://gitext.gfz-potsdam.de/ajacquey/lynx
# home: https://www.mooseframework.org
google_analytics: True
Translators:
type: MooseDocs.base.Translator
incremental_build: False
Extensions: Extensions:
MooseDocs.extensions.navigation:
name: 'LYNX'
repo: https://gitext.gfz-potsdam.de/ajacquey/lynx
# home: https://www.mooseframework.org
menu:
Getting Started: getting_started/index.md
Documentation: documentation.menu.md
Help: help.menu.md
# News: newsletter/index.md
MooseDocs.extensions.appsyntax: MooseDocs.extensions.appsyntax:
executable: ${ROOT_DIR} executable: ${ROOT_DIR}
includes: includes:
- include - include
\ No newline at end of file
# Damage Rheology Development
Here we describe the base for the damage rheology implementation in LYNX.
## Stress update
We rely of the elastic energy and stress formulation of [cite:lyakhovsky1997]:
\begin{equation}
\sigma_{ij} = \left(\lambda - \frac{\alpha \gamma}{\xi}\right) \varepsilon_{kk} \delta_{ij} + \left(2G - \alpha \gamma \left(\xi - 2\xi_{0}\right)\right) \varepsilon_{ij}.
\end{equation}
LYNX uses an incremental formulation for the stress update. Based on a Taylor expansion, the stress at a new time step $n+1$ is written:
\begin{equation}
\sigma_{ij}^{n+1} = \sigma_{ij}^{n} + \frac{\partial \sigma_{ij}}{\partial \varepsilon_{kl}}:\left(\varepsilon_{kl}^{n+1} - \varepsilon_{kl}^{n}\right) + \frac{\partial \sigma_{ij}}{\partial \alpha} \left(\alpha^{n+1} - \alpha^{n}\right).
\end{equation}
The previous expression can be rearranged as:
\begin{equation}
\sigma_{ij}^{n+1} = \sigma_{ij}^{n} + \mathbb{C}^{0}_{ijkl} : \left(\varepsilon_{kl}^{n+1} - \varepsilon_{kl}^{n}\right) - \mathbb{C}^{\xi}_{ijkl} : \left(\varepsilon_{kl}^{n+1} - \varepsilon_{kl}^{n}\right) - \sigma_{ij}^{\alpha} \left(\alpha^{n+1} - \alpha^{n}\right),
\end{equation}
where:
\begin{equation}
\label{eq:stiffness}
\mathbb{C}^{0}_{ijkl} = \lambda \delta_{ij}\delta_{kl} + \left[G - \alpha^{n} \gamma\left(\frac{\xi^{n}}{2} - \xi_{0}\right)\right]\left(\delta_{ik}\delta_{jl} + \delta_{il}\delta_{jk}\right),
\end{equation}
\begin{equation}
\mathbb{C}^{\xi}_{ijkl} = \alpha^{n} \gamma \left(\frac{\varepsilon_{ij}^{n}}{\lVert\varepsilon_{ij}^{n}\rVert}\delta_{kl} + \frac{\varepsilon_{kl}^{n}}{\lVert\varepsilon_{ij}^{n}\rVert}\delta_{ij} - \xi^{n} \frac{\varepsilon_{ij}^{n} \varepsilon_{kl}^{n}}{{\lVert \varepsilon_{ij}^{n}\rVert}^{2}}\right),
\end{equation}
and
\begin{equation}
\sigma_{ij}^{\alpha} = \gamma\left[\left(\xi^{n} - 2\xi_{0}\right)\varepsilon_{ij}^{n} + \lVert\varepsilon_{ij}^{n}\rVert \delta_{ij} \right]
\end{equation}
The parameter $\xi_{0}$ represents the modified internal friction of the material. With some algebra, one can express this coefficient based on the friction angle and the elastic moduli (intact) of the material as:
\begin{equation}
\xi_{0} = -\sqrt{\frac{3}{1 + \frac{3}{2}\frac{K^{2}}{G^{2}}\sin^{2}\left(\varphi\right)}}
\end{equation}
## Inelastic model
In LYNX, we rely on a different formulation as the one presented in [cite:lyakhovsky1997,lyakhovsky2015] for the inelastic update. The yield function presented in [cite:lyakhovsky2015] reads:
\begin{equation}
f = D\varepsilon_{v}^{3} + {\lVert \varepsilon_{ij} \rVert}^{2} \left(\xi - \xi_{0}\right)
\end{equation}
One can express this yield in the stress space in several ways. Here, we chose to use the following formulation because it includes as less as possible undefined regions for the yield. This formulation reads:
\begin{equation}
\label{eq:critical_strain_ratio}
f = \xi - \xi_{cr}, \quad \text{with} \quad \xi_{cr} = \xi_{0} - \left(\sqrt{3} + \xi_{0}\right)\frac{\varepsilon_{v}}{\varepsilon_{vc}} \frac{\xi^{2}}{3}, \quad \text{and} \quad \varepsilon_{vc} = \frac{\left(\sqrt{3} + \xi_{0}\right)}{3D}.
\end{equation}
where the values of $\varepsilon_{v}$ and $\xi$ are calculated based on the previous timestep. This expression can therefore be used to express a yield in the form:
\begin{equation}
f = e_{d} - \frac{\sqrt{2}}{3}\sqrt{\frac{3 - \xi_{cr}^{2}}{\xi_{cr}^{2}}} \varepsilon_{v},
\end{equation}
which can be expressed in stress space using non-relevant elastic moduli. Here we choose to use the ones forming the stiffness defined in [eq:stiffness]:
\begin{equation}
\label{eq:damage_yield}
\mathcal{F} = \sigma_{e} - \frac{\sqrt{2}G_{e}}{K_{e}} \sqrt{\frac{3 - \xi_{cr}^{2}}{\xi_{cr}^{2}}} p.
\end{equation}
The inelastic strain update is conducted following a non-associative viscoplastic model using [eq:damage_yield] as a yield function.
The update therefore follows the procedure describe in [Viscoplasticity](application_development/viscoplasticity.md). The general update procedure is therefore conducted in the following order:
1. Trial State: $p^{tr} = \tilde{p}^{tr} + K_{e} \Delta \varepsilon_{v}^{tr}$ and $\sigma_{e}^{tr} = \tilde{\sigma}_{e}^{tr} + G_{e} \Delta e_{d}^{tr}$
2. Inelastic strain update:
3. Inelastic correction:
3. Damage and strain correction: $\sigma_{ij} = \bar{\sigma}_{ij} - \mathbb{C}^{\xi}_{ijkl} : \Delta\varepsilon_{kl} - \sigma_{ij}^{\alpha} \Delta \alpha$
!alert note prefix=False
The friction coefficient in [eq:damage_yield] is not always defined due to the square roots in its expression and in [eq:critical_strain_ratio].
## Damage evolution
After updating the stress following the previously described procedure, we compute the rate of damage accumulation as:
\begin{equation}
\frac{\partial \alpha}{\partial t} = \frac{\mathcal{F}}{\eta_{\alpha}}
\end{equation}
The expression of the damage accumulation shows that the damage accumulation is controlled by the amount of overstress after the inelastic update. If the deformation is mainly brittle, the accumulation of inelastic strain is quite small and therefore leading to a significant damage accumulation whereas if the deformation is mainly ductile, the inelastic strain will be significant and therefore reduce the amount of accumulated damage.
!bibtex bibliography
\ No newline at end of file
## Some identities
In the following description, we make use of the following identities extended from [cite:dunne2005].
Stress invariants:
\begin{equation}
\begin{aligned}
p &= -\frac{\sigma_{kk}}{3} \\
\sigma_{e} &= \sqrt{\frac{3}{2}\tau_{ij}:\tau_{ij}}
\end{aligned}
\end{equation}
Strain invariant:
\begin{equation}
\begin{aligned}
\Delta \varepsilon_{v}^{in} &= - \Delta \varepsilon_{kk}^{in} \\
\Delta e_{d}^{in} &= \sqrt{\frac{2}{3}\Delta e_{ij}^{in}:e_{ij}^{in}}
\end{aligned}
\end{equation}
These invariants can be used to express relations between stress invariants and their trial states:
\begin{equation}
\label{eq:identity_stress_strain}
\begin{aligned}
p &= p^{tr} - K \Delta \varepsilon_{v}^{in} \\
\sigma_{e} &= \sigma_{e}^{tr} - 3 G \Delta e_{d}^{in}
\end{aligned}
\end{equation}
\ No newline at end of file
# Application Development
Here we list some useful infos for developers of LYNX
- [Plasticity](application_development/plasticity.md)
- [Viscoplasticity](application_development/viscoplasticity.md)
- [Damage rheology](application_development/damage_rheology.md)
\ No newline at end of file
# Plasticity
Here we describe the update procedure and tangent operator for non-associative plasticity.
!include application_development/identities.md
!include application_development/yield_function.md
## Flow rules
For plastic deformation, the yield function follows the following rule:
\begin{equation}
\mathcal{F} \leqslant 0
\end{equation}
The flow rule for the plastic strain increment is written as follow:
\begin{equation}
\Delta \varepsilon_{ij}^{p} = \Delta \lambda\frac{\partial \mathcal{G}}{\partial \sigma_{ij}}
\end{equation}
This expression can be used to express the invariants of the plastic strain increment:
\begin{equation}
\begin{aligned}
&\Delta \varepsilon_{v}^{p} = - \beta \Delta \lambda \\
&\Delta e_{d}^{p} = \Delta \lambda
\end{aligned}
\end{equation}
where $\Delta \lambda$ is the plastic increment. It follows the following rule:
\begin{equation}
\mathcal{F}\Delta \lambda = 0
\end{equation}
which can be expressed as:
\begin{equation}
\begin{aligned}
\Delta \lambda &= 0 \quad \text{if} \quad \mathcal{F} < 0 \\
\Delta \lambda &> 0 \quad \text{if} \quad \mathcal{F} = 0
\end{aligned}
\end{equation}
Using Eq. 3, the plastic increment can be written:
\begin{equation}
\Delta \lambda = \frac{<\mathcal{F}^{tr}>}{3G + \alpha \beta K}
\end{equation}
## Tangent operator modulus
Here we extend the tangent operator modulus given in [cite:dunne2005] to account for volumetric deformation and non-associative models.
The tangent operator modulus is defined as:
\begin{equation}
\mathbb{D}_{ijkl} = \frac{\delta \sigma_{ij}}{\delta \varepsilon_{kl}}
\end{equation}
!bibtex bibliography
\ No newline at end of file
# Viscoplasticity
Here we describe the update procedure and tangent operator for non-associative viscoplasticity.
!include application_development/identities.md
!include application_development/yield_function.md
## Flow rules
The flow rules for the viscoplastic strain increment is defined as:
\begin{equation}
\Delta \varepsilon_{ij}^{vp} = \frac{<\mathcal{F}> \Delta t}{\eta}\frac{\partial \mathcal{G}}{\partial \sigma_{ij}}
\end{equation}
This expression can be rearranged by considering the magnitude of the viscoplastic strain rate $\Delta\lambda$:
\begin{equation}
\begin{aligned}
&\Delta \varepsilon_{v}^{vp} = - \beta \Delta \lambda \\
&\Delta e_{d}^{vp} = \Delta \lambda \\
&\Delta \lambda = \frac{<\mathcal{F}> \Delta t}{\eta}
\end{aligned}
\end{equation}
Using [eq:identity_stress_strain], the increment of viscoplastic strain can be written:
\begin{equation}
\Delta \lambda = \frac{1}{\left(1 + \frac{\left(3G + \alpha\beta K\right)\Delta t}{\eta}\right)}\frac{<\mathcal{F}^{tr}>\Delta t}{\eta}
\end{equation}
Furthermore, using the expression of the plastic increment $\Delta \lambda^{p}$ described in [Plasticity](application_development/plasticity.md), the previous expression can be expressed as:
\begin{equation}
\Delta \lambda = \frac{\frac{\left(3G + \alpha\beta K\right)\Delta t}{\eta}}{\left(1 + \frac{\left(3G + \alpha\beta K\right)\Delta t}{\eta}\right)} \Delta \lambda^{p}
\end{equation}
## Tangent operator modulus
!bibtex bibliography
\ No newline at end of file
## Yield function and Potential
We use a Drucker-Prager like yield function:
\begin{equation}
\mathcal{F} = \sigma_{e} - \alpha p - k,
\end{equation}
where $\alpha = \sqrt{3} \sin \left(\varphi\right)$ and $k = \sqrt{3} C \cos \left(\varphi\right)$. $\varphi$ is the friction angle and $C$ is the cohesion of the material.
The potential (for non-associative models) is defined as:
\begin{equation}
\mathcal{G} = \sigma_{e} - \beta p - k,
\end{equation}
where $\beta = \sqrt{3} \sin \left(\psi\right)$ with $\psi$ as the dilation angle.
\ No newline at end of file
# Application Usage
Here will be some infos about the usage of LYNX
\ No newline at end of file
@article{lyakhovsky1997,
author = {Lyakhovsky, Vladimir and Reches, Ze'ev and Weinberger, Ram and Scott, Thurman E.},
title = {Non-linear elastic behaviour of damaged rocks},
journal = {Geophysical Journal International},
year = {1997},
volume = {130},
number = {1},
pages = {157-166},
doi = {10.1111/j.1365-246X.1997.tb00995.x},
url = {http://dx.doi.org/10.1111/j.1365-246X.1997.tb00995.x}
}
@article{lyakhovsky2015,
author = {Lyakhovsky, Vladimir and Zhu, Wenlu and Shalev, Eyal},
title = {Visco-poroelastic damage model for brittle-ductile failure of porous rocks},
journal = {Journal of Geophysical Research: Solid Earth},
year = {2015},
volume = {120},
number = {4},
pages = {2179-2199},
doi = {10.1002/2014JB011805},
url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1002/2014JB011805}
}
@book{dunne2005,
title = {Introduction to Computational Plasticity},
author = {Dunne, F. and Petrinic, N.},
isbn = {9780198568261},
lccn = {2005019639},
series = {Oxford series on materials modelling},
url = {https://global.oup.com/academic/product/introduction-to-computational-plasticity-9780198568261?cc=de&lang=en&},
year = {2005},
publisher = {Oxford University Press, USA}
}
\ No newline at end of file
!row! class=row
!col! class=s12 m6 l4
## [Application Usage](application_usage/index.md)
- [Examples](examples/index.md)
!col-end!
!col! class=s12 m6 l4
## [Application Development](application_development/index.md)
!col-end!
!col! class=s12 m6 l4
## Infrastructure
- [Python](utilities/python/index.md)
!col-end!
!row-end!
\ No newline at end of file
# Examples
- [Frequently Asked Questions](help/faq.md)
- [Troubleshooting](help/troubleshooting.md)
- [Developer Tools](help/development/index.md)
- [GFZ Linux cluster usage](help/glicconnectivity.md)
- [Contact Us](help/contact_us.md)
# Getting Started
Here will be some infos about installing MOOSE and LYNX
\ No newline at end of file
## [Help](help/index.md)
- [Frequently Asked Questions](help/faq.md)
- [Troubleshooting](help/troubleshooting.md)
- [Developer Tools](help/development/index.md)
- [GFZ Linux cluster usage](help/glicconnectivity.md)
- [Contact Us](help/contact_us.md)
# Contact us
Here will be listed possibilities to contact the main developers of LYNX
\ No newline at end of file
# Development
Here will be some infos and tips for tools to use for developers
\ No newline at end of file
# FAQ
Here will be a FAQ
\ No newline at end of file
# GFZ Linux Cluster connectivity
Here will be some infos about using LYNX on the GFZ Linux Cluster
\ No newline at end of file
# Help
Here will be some examples or benchmarks described
\ No newline at end of file
# Troubleshooting
Here will be some infos about troubleshooting
\ No newline at end of file
# Python
Here will be some infos and tips about the different python scripts useful for LYNX users and developers
\ No newline at end of file
/******************************************************************************/
/* LYNX, a MOOSE-based application */
/* */
/* Copyright (C) 2017 by Antoine B. Jacquey and Mauro Cacace */
/* GFZ Potsdam, German Research Centre for Geosciences */
/* */
/* This program is free software: you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation, either version 3 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/> */
/******************************************************************************/
#ifndef LYNXADVECTIONACTION_H
#define LYNXADVECTIONACTION_H
#include "Action.h"
class LynxAdvectionAction;
template <>
InputParameters validParams<LynxAdvectionAction>();
class LynxAdvectionAction : public Action
{
public:
LynxAdvectionAction(InputParameters params);
enum ElementLengthType
{
MIN,
MAX,
AVERAGE
};
enum ExecuteOnType
{
TIMESTEP_BEGIN,
TIMESTEP_END
};
virtual void act() override;
protected:
virtual void createAuxVariableActions();
virtual void createAuxKernelActions();
virtual void createPostProcessorActions();
virtual void createKernelActions();
ElementLengthType _element_length_type;
ExecuteOnType _execute_on;
Real _beta_stabilization;
Real _cr_stabilization;
Real _coeff_Hs;
std::vector<VariableName> _velocities;
std::vector<VariableName> _displacements;
std::vector<VariableName> _compositional_phases;
std::vector<VariableName> _temperature;
std::vector<std::string> _aux_variables;
std::vector<std::string> _aux_kernels;
std::vector<std::string> _max_var_pp;
std::vector<std::string> _min_var_pp;
std::vector<std::string> _avg_var_pp;
std::vector<std::string> _max_entropy_pp;
std::vector<std::string> _min_entropy_pp;
std::vector<std::string> _avg_entropy_pp;
};
#endif // LYNXADVECTIONACTION_H
/******************************************************************************/
/* LYNX, a MOOSE-based application */
/* */
/* Copyright (C) 2017 by Antoine B. Jacquey and Mauro Cacace */
/* GFZ Potsdam, German Research Centre for Geosciences */
/* */
/* This program is free software: you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation, either version 3 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/> */
/******************************************************************************/
#ifndef LYNXPRESSUREACTION_H
#define LYNXPRESSUREACTION_H
#include "Action.h"
class LynxPressureAction;
template <>
InputParameters validParams<LynxPressureAction>();
class LynxPressureAction : public Action
{
public:
LynxPressureAction(const InputParameters & params);
virtual void act() override;
protected:
std::vector<std::vector<AuxVariableName>> _save_in_vars;
std::vector<bool> _has_save_in_vars;
};
#endif // LYNXPRESSUREACTION_H
\ No newline at end of file
/******************************************************************************/
/* LYNX, a MOOSE-based application */
/* */
/* Copyright (C) 2017 by Antoine B. Jacquey and Mauro Cacace */
/* GFZ Potsdam, German Research Centre for Geosciences */
/* */
/* This program is free software: you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation, either version 3 of the License, or */
/* (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/> */
/******************************************************************************/
#ifndef LYNXCOMBOPHASESAUX_H
#define LYNXCOMBOPHASESAUX_H
#include "AuxKernel.h"
class LynxComboPhasesAux;
template <>
InputParameters validParams<LynxComboPhasesAux>();