Integrator::Fracture

src/Integrator/Fracture.H

This class implements second and fourth order phase field brittle fracture with near singular solver. This class inherits from the base class Base/Mechanics.H. See this link for more information on this implementation.

The energy functional for a second order model is given by

\[\mathcal{L}= \int_\Omega \left[\left(g(c) + \eta \right)W_0^+ + W_0^-\right] dV + \int_\Omega G_c \left[ \frac{w(c)}{4\xi} + \xi |\nabla c|^2\right] dV\]

where \(g(c)\) and \(w(c)\) are interpolation functions specified by the user. The fracture energy \(G_c\) and crack length scale \(xi\) are also read from input file. The tension compression asymmetry is accounted by splitting the strain energy \(W_0\) as

\[W_0^\pm = \frac{1}{2} \lambda (\operatorname{tr}\bm{\varepsilon}_\pm)^2 + \mu \operatorname{tr}\left(\bm{\varepsilon}_\pm^2\right), \quad \bm{\varepsilon_\pm} = \sum_{i=1}^d \left(\varepsilon_i \right)_\pm \hat{\bm{v}}_i\otimes\hat{\bm{v}}_i\]

where \(\lambda\) and \(\mu\) are material models for linear elastic isotropic material, \(\bm{\varepsilon}_\pm\) are the positive and negative components of the strain tensor \(\bm{\varepsilon}\) computed through eigenvalue decomposition. The fourth order model adds a laplacian term to the free energy functional. The code performs a staggered solve where it solves the elastic problem implicitly and crack problem explicitly.

Class methods:

  1. Fracture(): Basic constructor. Does nothing, and leaves all values initiated as NAN.

  2. Fracture(IO::ParmParse &pp): Calls the parser.

  3. static void Parse(Fracture &value, IO::ParmParse &pp) Parses input file, ICs, BCs, and sets up multifabs appropriately

  4. void Initialize(int lev) override Calls IC and sets up the initial crack geometry.

  5. virtual void UpdateModel(int a_step) override Performs degradation by updating the \(\psi\) field using \(g(c)\).

  6. void TimeStepBegin(Set::Scalar a_time, int a_step) override Solves the elastic problem, performs eigen value decomposition of strain, and computes the positive part of the strain energy.

  7. void Advance(int a_lev, amrex::Real a_time, amrex::Real a_dt) Advances the crack field by computing the variational derivative of energy functional with \(c\).

  8. void TagCellsForRefinement(int lev, amrex::TagBoxArray &a_tags, Set::Scalar a_time, int a_ngrow) override Refines the grid based on the crack field.

  9. void Integrate(int amrlev, Set::Scalar time, int step, const amrex::MFIter &mfi, const amrex::Box &a_box) override Performs spatial integration of the driving force to check for convergence of crack problem

  10. void TimeStepComplete(Set::Scalar /*time*/, int /* iter*/) Checks whether the solver should work on crack problem or elastic problem.

material.refinement_threshold
conditional

Material field related parsing

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
material.refinement_threshold
alamo-3d-coverage-g++
material.refinement_threshold
fracture-2d-coverage-g++
material.refinement_threshold
fracture-3d-coverage-g++
material.refinement_threshold
driving_force_refinement_threshold
1e+100 conditional

Driving force threshold

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
driving_force_refinement_threshold
alamo-3d-coverage-g++
driving_force_refinement_threshold
fracture-2d-coverage-g++
driving_force_refinement_threshold
fracture-3d-coverage-g++
driving_force_refinement_threshold
material.model
repeatable conditional

Let's query material properties for different materials in the system

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
material.model
alamo-3d-coverage-g++
material.model
fracture-2d-coverage-g++
material.model
fracture-3d-coverage-g++
material.model
crack.refinement_threshold
0.0001 conditional

Crack related parsing mesh refinement criteria

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
crack.refinement_threshold
alamo-3d-coverage-g++
crack.refinement_threshold
fracture-2d-coverage-g++
crack.refinement_threshold
fracture-3d-coverage-g++
crack.refinement_threshold
crack.df.beta
0 conditional

constant multiplier for fourth orther model with bilaplacian

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
crack.df.beta
alamo-3d-coverage-g++
crack.df.beta
fracture-2d-coverage-g++
crack.df.beta
fracture-3d-coverage-g++
crack.df.beta
crack.df.tol_rel
0.001 conditional

relative tolerance for convergence of driving force

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
crack.df.tol_rel
alamo-3d-coverage-g++
crack.df.tol_rel
fracture-2d-coverage-g++
crack.df.tol_rel
fracture-3d-coverage-g++
crack.df.tol_rel
crack.df.tol_abs
0.001 conditional

absolute tolerance for convergence of driving force

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
crack.df.tol_abs
alamo-3d-coverage-g++
crack.df.tol_abs
fracture-2d-coverage-g++
crack.df.tol_abs
fracture-3d-coverage-g++
crack.df.tol_abs
crack.df.max_iter
500 conditional

Maximum number of solver iterations

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
crack.df.max_iter
alamo-3d-coverage-g++
crack.df.max_iter
fracture-2d-coverage-g++
crack.df.max_iter
fracture-3d-coverage-g++
crack.df.max_iter
crack.df.mult_Gc
1 conditional

constant multiplier for controlling fracture energy of interface

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
crack.df.mult_Gc
alamo-3d-coverage-g++
crack.df.mult_Gc
fracture-2d-coverage-g++
crack.df.mult_Gc
fracture-3d-coverage-g++
crack.df.mult_Gc
crack.df.mult_lap
1 conditional

constant multiplier for second order model with laplacian

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
crack.df.mult_lap
alamo-3d-coverage-g++
crack.df.mult_lap
fracture-2d-coverage-g++
crack.df.mult_lap
fracture-3d-coverage-g++
crack.df.mult_lap
crack.df.el_mult
1 conditional

unit conversion multiplier between elastic problem and crack problem

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
crack.df.el_mult
alamo-3d-coverage-g++
crack.df.el_mult
fracture-2d-coverage-g++
crack.df.el_mult
fracture-3d-coverage-g++
crack.df.el_mult
crack.ic
constant ellipse expression notch conditional

Let's figure out if there is an initial crack or void

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
crack.ic0.type
alamo-3d-coverage-g++
crack.ic0.type
fracture-2d-coverage-g++
crack.ic0.type
fracture-3d-coverage-g++
crack.ic0.type
crack.ic
repeatable conditional

Let's figure out if there is an initial crack or void

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
crack.ic
alamo-3d-coverage-g++
crack.ic
fracture-2d-coverage-g++
crack.ic
fracture-3d-coverage-g++
crack.ic
crack.model
repeatable conditional

This is needed for the specific crack model we are implementing

Names by executable 4 executables, 4 uses
alamo-2d-coverage-g++
crack.model
alamo-3d-coverage-g++
crack.model
fracture-2d-coverage-g++
crack.model
fracture-3d-coverage-g++
crack.model