Lattice Strain
Group: Lattice | Class: CellStrainCard
What the card does
Scan controlled axial strains of the cell. Choose a uniaxial, biaxial, triaxial, or isotropic mode and provide percentage ranges and steps; the card scales lattice vectors to generate the requested strain states.
Example workflow
Scenario: Predicted elastic constants have a large bias
A Si NEP reproduces the energy-volume curve but predicts C11 15% above the DFT reference. The training set is concentrated near equilibrium and does not show the model explicit tensile and compressive states, so the elastic derivative relies on extrapolation.
Diagnosis: Elastic constants are second derivatives of energy with respect to strain. Sparse strain sampling around equilibrium makes these derivatives unreliable. Add cells with known tensile and compressive strains so the model interpolates locally.
Input: A relaxed Si unit cell, currently the only structure in the training set.
Objective: Apply uniaxial x strains from -2% to +2% in 1% steps, producing five structures for interpolation within that range.
Parameters:
Axes=uniaxialx_range=[-2, 2, 1](-2% to +2% in 1% steps)
Output: Five structures (-2%, -1%, 0%, +1%, +2%) with progressively scaled x lattice vectors and fixed fractional coordinates.
How to verify that training-set quality improved:
Retrain and recompute C11; it should move closer to the DFT reference.
If improvement is insufficient, extend the range toward ±5%, add biaxial states, or increase sampling density.
If +5% strain moves the nearest-neighbor distance more than 0.2 Å beyond the DFT reference, treat the deformation as suspect and reduce the upper bound.
When to add this card
Add it when:
Elastic constants, bulk modulus, or stress-strain response show systematic bias
Training-set cell volumes and shapes are concentrated too tightly around equilibrium
The model should interpolate rather than extrapolate along a deformation path
Do not add it when:
Only local coordinate noise is needed; use
Atomic PerturbinsteadThe target system is insensitive to this strain and the added structures would only inflate the dataset
Parameters
Axes(axes)
str, default 'uniaxial'. uniaxial strains one direction for responses such as C11/C22/C33; biaxial strains two directions to sample in-plane coupling and Poisson response; isotropic scales all axes equally for EOS or bulk-modulus sampling. Do not choose independent triaxial scans for a simple volume curve: the Cartesian product can become enormous.
X Range(x_range)
tuple[float, float, float], default (-5.0, 5.0, 1.0). A [minimum, maximum, step] range in percent. It applies only to directions enabled under Axes; isotropic mode uses only x_range. Smaller steps and wider ranges produce more structures.
As a starting point, ±1-2% is the elastic regime for many inorganic crystals and usually changes bond lengths by less than 0.1 Å. ±3-5% enters a more anharmonic regime suitable for stress-strain coverage. Above ±6% is extreme; inspect nearest-neighbor distances in every batch.
Y Range(y_range)
tuple[float, float, float], default (-5.0, 5.0, 1.0). Same syntax and guidance as x_range, applied to y when that axis is enabled. Isotropic mode does not use it separately.
Z Range(z_range)
tuple[float, float, float], default (-5.0, 5.0, 1.0). Same syntax and guidance as x_range, applied to z. Isotropic mode does not use it separately.
Identify Organic(identify_organic)
bool, default false. Enable for molecular crystals, MOFs, and organic semiconductors. The card identifies molecular clusters and keeps intramolecular bonds approximately rigid while straining intermolecular geometry. Leave it disabled for purely inorganic crystals.
Recommended presets
Near-equilibrium elasticity (isotropic ±1%, suitable for bulk modulus)
{
"class": "CellStrainCard",
"check_state": true,
"organic": false,
"engine_type": "isotropic",
"x_range": [-1, 1, 1],
"y_range": [-1, 1, 1],
"z_range": [-1, 1, 1]
}
Anisotropic elasticity (uniaxial ±3%, seven points per direction)
{
"class": "CellStrainCard",
"check_state": true,
"organic": false,
"engine_type": "uniaxial",
"x_range": [-3, 3, 1],
"y_range": [-3, 3, 1],
"z_range": [-3, 3, 1]
}
Broad directional coverage (biaxial ±6%, for diagnosing failure under large deformation)
{
"class": "CellStrainCard",
"check_state": true,
"organic": false,
"engine_type": "biaxial",
"x_range": [-6, 6, 2],
"y_range": [-6, 6, 2],
"z_range": [-6, 6, 2]
}
Recommended combinations
Lattice Strain->Atomic Perturb: combine cell deformation with coordinate noiseLattice Strain->Shear Matrix Strain: sample axial strains before shear componentsSuper Cell->Lattice Strain: reach the target cell size before scanning strain
Common questions
No output. A step is nonpositive or a maximum is below its minimum. Check x_range, y_range, and z_range.
Cell angles changed unexpectedly. Axial strain does not alter angles; inspect whether the upstream cell was already nonorthogonal.
Combinatorial explosion. triaxial with 0.5% steps over ±5% produces 21³ = 9,261 structures. Estimate Nx × Ny × Nz before running.
Intramolecular bonds are stretched or broken. Enable Identify organic.
Output labels
Examples: Str(x=-1%,y=2%) and Str(all=3%).
Reproducibility
Deterministic: identical inputs and parameters produce identical outputs.