forked from 1b-agent/fieldcraft-upstream
Explicit X2: large deformation, J2 and Johnson-Cook plasticity, damage and erosion (M10)
- model: materials gain solver-neutral plastic (bilinear isotropic/kinematic, hardening table, Johnson-Cook with adiabatic heating), damage (Johnson-Cook D1-D5) and erosion (plastic strain); explicit steps gain nonlinear_geometry (default on) and stress_rate (jaumann | green_naghdi). - fem: rotation (Hughes-Winget, Flanagan-Taylor), plasticity (radial return, capped bracketed Newton for Johnson-Cook, damage; the update takes the mechanical strain increment so thermal strains can be subtracted), closed-form hex8 gradients for deformed configurations. - explicit: updated Lagrangian hex8/tet4, per-element material state, erosion with reported energy, plastic work in the energy account. - solver: warns that the linear solver uses the elastic constants of plastic materials (results hash-identical). - decks: Abaqus *PLASTIC (+ Johnson-Cook keywords), Nastran MATS1/TABLES1, LS-DYNA *MAT_PLASTIC_KINEMATIC / *MAT_PIECEWISE_LINEAR_PLASTICITY; what a format cannot express is reported as Unsupported. - engine: model.material.plasticity, model.material.damage (catalogue ready), explicit element probe, eroded elements in the solve summary. Step commits before the rebase onto the DOF framework: branch explicit-x2-steps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
This commit is contained in:
1 parent
4c0fcc80ad
commit
50764def18
38 files changed
+2839
-254
No files matched your search
@@ -118,6 +118,30 @@ pub struct ExplicitDynamic {
|
||||
/// Artificial bulk viscosity.
|
||||
#[serde(default)]
|
||||
pub bulk_viscosity: BulkViscosity,
|
||||
/// Large deformation (updated Lagrangian: gradients of the current configuration, stress
|
||||
/// updated in rate form with an objective stress rate); `false` keeps the gradients of the
|
||||
/// undeformed mesh (small displacements and rotations).
|
||||
#[serde(default = "yes")]
|
||||
pub nonlinear_geometry: bool,
|
||||
/// The objective stress rate of large deformation.
|
||||
#[serde(default)]
|
||||
pub stress_rate: StressRate,
|
||||
}
|
||||
|
||||
fn yes() -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
/// The objective stress rate a large-deformation stress update uses.
|
||||
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum StressRate {
|
||||
/// Jaumann (co-rotational with the spin), integrated with the Hughes–Winget rotation.
|
||||
#[default]
|
||||
Jaumann,
|
||||
/// Green–Naghdi (co-rotational with the rotation of the polar decomposition), integrated as
|
||||
/// Flanagan and Taylor do.
|
||||
GreenNaghdi,
|
||||
}
|
||||
|
||||
fn default_dt_scale() -> f64 {
|
||||
@@ -142,6 +166,8 @@ impl ExplicitDynamic {
|
||||
rigid_walls: Vec::new(),
|
||||
hourglass: Hourglass::default(),
|
||||
bulk_viscosity: BulkViscosity::default(),
|
||||
nonlinear_geometry: true,
|
||||
stress_rate: StressRate::default(),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user