This is a Dislocation Transport-based Crystal Plasticity Material Model(DiscoFlux), implemented within MOOSE framework(https://mooseframework.inl.gov/index.html).
- The material model represents the dislocation within a crystalline material in the form of density.
- Total dislocation density is split into four categories: edge_positive, edge_negative, screw_positive, screw_negative.
- Dislocation densities in each of the slip_systems are represented as an independent solution variable(coupled). As an example, this leads to 48 solution variables for fcc crystal plus three displacements. Total 51 DOFs per node. Solution variables are grouped into four array variables.
- Dislocation densities have both local and nonlocal evolution terms in it. The local evolution is represented in the rate form. The nonlocal evolution is relaized by the transport of dislocation within the grain and transfer of dislocation across the grain boundary(GB).
- At the GB, dislocations can get transferred from one slip_system to a different one acording to the mis-orientation between the two grains. A geometric criterion, incorporating slip_direction, slip_plane_normal and gb_plane_normal in the rotated configuration, is used to determine the direction of transfer at the grain boundary.
- Implemented using Total Lagrangian Formulation and implicit time integration.
- Discretization used is Finite ELemet Method.
- This one implementation can be used for three types of crystal plasticity models: (a) Local Crystal Plasticity. (b) Nonlocal crystal plasticity with dislocation transport within the grain. (c) Nonlocal crystal plasticity with dislocation transport within the grain and across the grain boundary.
- Download/clone the modified version of moose from LANL-Gitlab.
- Set-up the conda and required libraries according to the instruction given in moose website: https://mooseframework.inl.gov/getting_started/installation/conda.html
- Download/clone 'DiscoFluxM' repository.
- Go inside the repository: cd ./DiscoFluxM
- Compile the code: make -j 2
- Generate the polycrystal mesh for your problem of interest.
- Make sure the the mesh contains each grain as a seprate element-set.
- All boundary-sets should be there to impose any boundary_condition as well as interface_condition(for dislocation transfer across GB).
- The gradient based terms in the computation of back_stress are sensitive to physical dimension of the domain and mesh size. This may cause convergence issue, if numerical parameters are not set properly. Even one highly skewed element can cause convergence issue.
- It's worthwhile to do some experiment to find proper preconditioner when using Jacobian Free(kind of) solvers (e.g., PJFNK).