Skip to content

Commit

Permalink
fix: Avoid zero-division under uniaxial compression
Browse files Browse the repository at this point in the history
This fixes a zero-division for some orientations under uniaxial
compression, by catching the problematic values for slip invariants and
returning null-values for orientation change and grain growth. There are
some conditions where slip is simply not possible at all, and it is
worth adding this check even though most Real World Problems are
unlikely to hit this issue (strain rates would normally have pure shear,
simple shear and compressional components combined).
  • Loading branch information
adigitoleo committed Sep 16, 2024
1 parent 56940fa commit fd00a03
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/pydrex/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,12 @@ def _get_rotation_and_strain(
"""
crss = get_crss(phase, fabric)
slip_invariants = _get_slip_invariants(strain_rate, orientation)
# Handle the case where all slip invariants are zero,
# thus no slip is possible (occurs for a few specific orientations and strain rates,
# for example in the case of uniaxial compression and an identity orientation
# i.e. grain orientation aligned to the coordinate system).
if min(slip_invariants) == max(slip_invariants) == 0.0:
return np.zeros((3, 3)), 0.0
if phase == MineralPhase.olivine:
slip_indices = np.argsort(np.abs(slip_invariants / crss))
slip_rates = _get_slip_rates_olivine(
Expand Down

0 comments on commit fd00a03

Please sign in to comment.