Coder Social home page Coder Social logo

hugary1995 / raccoon Goto Github PK

View Code? Open in Web Editor NEW
52.0 5.0 43.0 856.84 MB

Massively parallel FEM code for phase-field for fracture by Dolbow Lab at Duke University

Home Page: https://hugary1995.github.io/raccoon

License: GNU Lesser General Public License v2.1

Makefile 1.18% C++ 52.17% Python 1.71% Shell 0.26% GLSL 1.69% Assembly 6.01% C 0.05% SWIG 35.96% Gnuplot 0.97%
finite-elements numerical-methods fracture-mechanics computational-mechanics parallel-computing

raccoon's Introduction

RACCOON

Tests Documentation clang-format coverage

RACCOON is built on MOOSE, a massively parallel object-oriented framework for finite element. RACCOON extends the framework's standard utility to solve phase-field fracture equations.

Follow instructions to install RACCOON.

Full documentation available at here

raccoon's People

Contributors

andrembcosta avatar bozeng1997 avatar casperversteeg avatar github-actions[bot] avatar giudgiud avatar hugary1995 avatar lindsayad avatar loganharbour avatar lyyc199586 avatar mengnanli91 avatar sina-av avatar thegreatcid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

raccoon's Issues

Add Johnson-Cook plasticity model

Reason

It is a widely used model. Applicable for many common materials.

Design

Add a type for the JC plasticity model.

Impact

Users will have access to the JC plasticity model for use in their own simulations.

Add thermal eigenstrains to total formation

Reason

Want the ability to include thermal eigenstrains to simulations in RACCOON

Design

Add class that computes thermal eigenstrains in a total formulation

Impact

Users will be able to include thermal eigenstrains in their simulations in RACCOON

Implementation of a variational recast of the nucleation model

Reason

See A variational formulation of Griffith phase-field fracture with material strength by C. J. Larsen, J. E. Dolbow, O. Lopez-Pamies.
This is a variational recast of the phase-field fracture formulation put forth by Kumar, Francfort and Lopez-Pamies (2018).

image

Example input deck

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

Issue on website

Bug Description

Conda channels on the install guide are outdated

Updated channels
conda config --add channels conda-forge
conda config --add channels idaholab

Ductile fracture

  • Extend the compressible Neo-Hookean model
  • Extend the hypoelastic models in tensor_mechanics
  • Support hardening laws: power-law
  • Support hardening laws: exponential
  • Support hardening laws: temperature dependency

Some questions regarding PFM on raccoon

Hello,

I have some questions regarding phase field modeling using the raccoon app:

  1. Assuming we are using the traditional Allen-Cahn formula \dot{d}=\frac{1}{L}(\frac{\psi}{d}) where d is the damage and the phase field variable, psi the free energy and L is the mobility, I understand how d is defined and how psi is defined but I do not find mention of the mobility and the viscosity anywhere.. could you please guide me on this?

  2. For the free energy, I see that in the given tutorials psi is usually function of the active elastic energy and no mention of the inactive elastic energy is there a reason for this? I have tried to add psie_inactive to the psi formula in the input file by adding psie_inactive as an auxvariable in the fracture.i file and adding it to the transfer block in the elastoplasticity.i file and by defining it again in the header file of the SmallDeformationIsotropicElasticity.h but I am getting the error 'undefined psie_inactive', how can I proceed to fix this?
    Thank you.

Kumar's model

Reason

Implement Kumar's model in raccoon.

Design

A material object to compute the external driving force will be added.

Impact

Add Kumar's model.

Track idaholab/moose

Reason

I can no longer afford the maintenance cost of manually rebase my moose.

Design

Change the submodule url to idaholab/moose

Impact

Lower maintenance cost (once RACCOON becomes a tracked app).

Add some new hardening laws

Reason

I need two new hardening laws for calibrating AISI 4340. They could be useful in general, so I'll add them to the master branch.

Design

Add two new classes.

Impact

New hardening laws.

update ConditionalBoundsAux for moose update

Bug Description

For moose version later than commit 2b0ca55, the way of accessing variable old values in BoundsAuxBase has changed. ConditionalBoundsAux needs to be changed accordingly.

Steps to Reproduce

Impact

prevent raccoon from auto updating moose submodule

Three point bending problem throwing an error

Bug Description

The three-point bending input files located in the tutorials folder do not run

Steps to Reproduce

./raccoon-opt -i ./tutorials/three_point_bending/elastoplasticity.i

Error states that the variable 'wp_active' does not exist

Impact

benshs do not run

Bug Description

I have compiled raccoon. run_test give ok for all of the tests.
36 passed, 0 skipped, 0 pending, 0 failed
But I could not run the examples in benshmarks

Steps to Reproduce

in raccoon/benchmarks/mode2_initial_damage
../../raccoon-opt -i fracture.i
gives
*** ERROR ***
/opt/projects/raccoon/benchmarks/mode2_initial_damage/fracture.i:11: no variable 'l' found for substitution expression
/opt/projects/raccoon/benchmarks/mode2_initial_damage/fracture.i:67: no variable 'Gc' found for substitution expression
/opt/projects/raccoon/benchmarks/mode2_initial_damage/fracture.i:67: no variable 'l' found for substitution expression
/opt/projects/raccoon/benchmarks/mode2_initial_damage/fracture.i:67: no variable 'psic' found for substitution expression
/opt/projects/raccoon/benchmarks/mode2_initial_damage/fracture.i:80: no variable 'k' found for substitution expression

raccoon/benchmarks/mode2_initial_damage/fracture.i

Impact

I would like to have this running to start using raccoon

Excutioner settings to solve elastodynamic explicitly

Bug Description

I am trying to solve elastodynamic part explicitly with Central difference time integrator, but getting DIVERGED_PC_FAILED errors:

Time Step 1, time = 2e-05, dt = 2e-05
Linear solve did not converge due to DIVERGED_PC_FAILED iterations 0
               PC failed due to FACTOR_NUMERIC_ZEROPIVOT 
 Solve Did NOT Converge!
Aborting as solve did not converge

Steps to Reproduce

For example, in tutorials for mode1_brittle_fracture, I change the Excutioner block to

[Executioner]
  type = Transient
  start_time = 0
  end_time = 3.5e-3
  dt = 2e-5
  [TimeIntegrator]
    type = CentralDifference
  []
[]

and change the stress divergence and add inertiaforce, with some density

[Kernels]
  [solid_x]
    type = ADDynamicStressDivergenceTensors
    variable = disp_x
    component = 0
  []
  [solid_y]
    type = ADDynamicStressDivergenceTensors
    variable = disp_y
    component = 1
    save_in = fy
  []
  [inertia_x]
    type = ADInertialForce
    variable = disp_x
  []
  [inertia_y]
    type = ADInertialForce
    variable = disp_y
  []
[]

Impact

I actually did the same thing for the elastodynamic solve in nano-pulsed simulation before and it works... I don't know why it cannot run now.

Bring back the history approach

  • Add a material to keep track of the history maximum of the fracture driving energy
  • Add the model-dependent threshold for prevent negative damage

Incorrect J2 in strength envelope

Bug Description

We are missing a factor of 1/2 in J2 while computing the failure envelope.

Steps to Reproduce

This is coding error.

Impact

This prevents @BoZeng1997 from validating the implementation with published results. We might need to re-gold a few regression tests.

Compilation error

Bug Description

I get the following error while compiling raccoon:

FixedPointTransient.C:28:18: error: no member named 'setInnerSolve' in 'TimeStepper'
_time_stepper->setInnerSolve(&_fp_solve)

Steps to Reproduce

  • A fresh moose install following moose instructions.
  • cloning raccoon and building the app.

Impact

Can not compile raccoon.

Use ADParsedMaterial for constitutive functions

  • Test ADParsedMaterial for degradation and crack geometric functions
  • Derive from ADParsedMaterial to provided a nicer interface to define degradation functions
  • Derive from ADParsedMaterial to provided a nicer interface to define crack geometric functions
    Predefine commonly used degradation functions, including
  • quadratic
  • cubic
  • Lorentz-type
    Predefine commonly used crack geometric functions, including
  • linear
  • quadratic
    Predefine commonly used indicator functions, including
  • linear
  • quadratic
  • power

Wrong external work postprocessor

Bug Description

This is embarassing. The external work postprocessor have an additional dt factor.

Steps to Reproduce

Run a model and evaluate the external work using the ExternalWork postprocessor. The result will be incorrect.

Impact

This gives wrong results.

Update some functions/names according to MOOSE

just to update some object parameter names, function names so that they stop throwing warnings. Changes include but not restricted to:

  1. The RankTwoTensor initializer in PhaseFieldJIntegral
  2. The "f_name" to "property_name" in CrackGeometricFunction and DegradationFunctionBase
  3. all test files using object mentioning 'f_name"

Documentation and post processing

Hey @hugary1995!
I was going over the code and found some points, thought let you know:

  1. In finding the Eigen strains , it seems that the comment is missing an inverse, meaning it should be \\mathbb{C}^-1
    params.addClassDescription(
    "This class computes the eigenstrain given a predefined intial stress. The eigenstrain is "
    "defined as $\\strain_0 = - \\mathbb{C} : \\stress_0$. Isotropic linear elasticity is "
    "assumed.");
  2. (This one is not really important) In this one, the comment should be "the plasticity model"
    /// The elasticity model
    SmallDeformationPlasticityModel * _plasticity_model;
  3. Also for the post processing purposes, in branch "devel", there is a class for calculating fracture energy. Is there any reason that class is not in the main branch? I'm thinking about a class that add the strain energy to the fracture energy in the Postprocess section (which can also be used later as a convergence criterion for solving the system of equations.)
    I also went over PR #27, on how to use ElasticEnergyDensity material already available in moose. But I think that one does not work with AD variables, and other that that we already have the strain energy (or energies) from our elastic (and plastic) materials so no need to calculate them again. So maybe we can have a post process class of type "ElementIntegralPostprocessor" which gets strain energy and crack surface density and fracture toughness and returns the energy.
    Please let me know if this is a good idea.
    I can also make a PR for what I'm proposing if that is easier to follow.
    Thanks

reduce memory usage of nucleation model implementation in raccoon

Two nucleation models for phase-field fracture are memory consuming. Either in how the material object is coded, or how the model is implemented in input deck level (or both).

source code

https://github.com/BoZeng1997/raccoon/blob/c24df81ba4ef97f1b3490821daa631d961e3e68d/src/materials/KLRNucleationMicroForce.C
https://github.com/BoZeng1997/raccoon/blob/c24df81ba4ef97f1b3490821daa631d961e3e68d/include/materials/KLRNucleationMicroForce.h

how the model is implemented

https://github.com/BoZeng1997/raccoon/tree/c24df81ba4ef97f1b3490821daa631d961e3e68d/tutorials/surfing_boundary_problem
The current implementation is for sure not the best way. It requires dispx dispy dispz to be transfered to the subapp. Then the subapp would compute stress tensor invariant I1 and J2. One way to improve it a little bit is by computing I1 and J2 in the mainapp then transfer it to subapp. I am waiting to see if there is even better way of improvement.

Hyperelasticity

Each strain measure and stress measure should support some splits if possible.
The stress calculators are also responsible for compute the elastic energy.

  • Add large strain measures: Green-Lagrangian
  • Add large strain measures: Left Cauchy-Green
  • Add large strain measures: Right Cauchy-Green
  • Add large strain measures: Eulerian-Almansi
  • Add large strain measures: Logarithmic
  • Add large stress measures: St. Vernant-Kirchhoff
  • Add large stress measures: Mooney-Rivlin
  • Add large stress measures: Neo-Hookean
  • Add large stress measures: Hencky-type

Trash panda is failing!

Bug Description

tutorials/surfing_boundary_problem.kumar_fracture: *** ERROR ***
tutorials/surfing_boundary_problem.kumar_fracture: /ramdisk/civet/build_0/raccoon/tutorials/surfing_boundary_problem/elasticity.i:204: missing required parameter 'Postprocessors/Jint/elastic_energy_name'
tutorials/surfing_boundary_problem.kumar_fracture: 	Doc String: "name of the elastic energy"

https://civet.inl.gov/job/913601/

Steps to Reproduce

Look at Civet

Impact

Makes stuff orange.

Registered objects

*** ERROR ***
A 'SmallStrainDegradedElasticPK2Stress_StrainSpectral' is not a registered object.

*** ERROR ***
A 'FixedPointProblem' is not a registered object.

*** ERROR ***
A 'ADPFFBarrier' is not a registered object.

nucleation model 2020 for heterogeneous material and stress balance equation

Reason

nucleation model should accept tensile strength, compressive strength and delta parameter as Material Properties like critical fracture release rate and regularization length.
stress balance equation for nucleation model $$F= {J_2 \over \mu} + {I_1^2 \over 9\kappa} - c_e -{3G_c \over 8\delta}=0 $$
when stress state is approaching the stress surface, the value of $F$ is going to show how far is it from stress surface locally. This is useful property to output for analysis.

Design

define tensile strength, compressive strength, delta as material.
add stress balance equation.

Impact

KL expansion

  • Custom problem for KL expansion
  • Assembly of the covariance matrix
  • Assembly of the mass matrix
  • Solve the generalized eigenvalue problem
  • In-code sampling

Add domain form J integral

Reason

Domain form J integral is more flexible and accurate. It also plays nicely with phase-field regularization.

Design

Add two new classes for domain form J integral. One responsible for the domain integral, another one responsible for the correction term due to pressure.

Impact

Added capability.

Tutorials

  • Mode I: brittle fracture #35
  • Mode II: brittle fracture #35
  • cohesive fracture #36
  • fatigue #40
  • pressurized fracture, include corrections to Gc and crack length #39 #42
  • ductile fracture #38
  • dynamic fracture and time integrators
  • KL expansion and soil desiccation #41
  • large deformation #37
  • initial cracks
  • conditional element deletion
  • coupling with xfem

Documentation + large deformation stress

Hey @hugary1995!
I was once again going over the code and found some points and questions that I'd like to share with you:

  1. (Not really important!) Here the name of the second parameter in the documentation should change from "exponentiate" to "plasticity_update"
    * @param exponentiate Whether to compute the stress based on an exponentiated Fe. This is used
    * in the exponential plasticity constitutive update, and can provide
    * potential speed optimizations if a logarithmic strain measure is used.
    * @return The computed stress given the deformation gradient and the constitutive relation
    */
    virtual ADRankTwoTensor computeMandelStress(const ADRankTwoTensor & Fe,
    const bool plasticity_update = false) = 0;
  2. (Typo) Here the name of the material should be CNH (instead of Hencky)
    [hencky]
    type = CNHIsotropicElasticity
    bulk_modulus = K
  3. I also have a question on large deformation elasticity models. For an elastic simulation, in ComputeLargeDeformationStress, we call the updateState method of the underlying elasticity model in which computeCauchyStress is used with the help of the Mandel stress coming form computeMandelStress. However, in CNH model under (e.g.) computeMandelStressNoDecomposition method, the calculated stress is the Kirchhoff stress. Would this cause any problem in the calculations? (As that Kirchhoff stress is treated as the Mandel stress). Please let me know if I'm missing something.
    Thanks a lot!

Initial conditions

  • thick initial crack, row of elements
  • support initial crack of arbitrary geometry
  • support initial history field

Documentation improvements

  • Add more examples/tutorials
  • Complete documentation
  • Complete theory manual: brittle fracture
  • Complete theory manual: cohesive fracture
  • Complete theory manual: ductile fracture
  • Complete theory manual: hydraulic fracture
  • Complete theory manual: fatigue
  • Complete theory manual: dynamic fracture
  • Complete theory manual: KL expansion
  • Complete theory manual: large deformation
  • Complete theory manual: correction to Gc and crack length
  • Complete theory manual: solvers

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.