Source code for atomate2.common.analysis.elastic

"""Tools for calculating elastic tensors."""

from __future__ import annotations


[docs] def get_default_strain_states(order: int) -> list[tuple[int, int, int, int, int, int]]: """ Generate a list of strain-states for calculating 2nd or 3rd order elastic tensors. Parameters ---------- order : int Order of the tensor expansion to be calculated. Can be either 2 or 3. Returns ------- list of tuple of int A list of strain states. """ if order == 2: return [ (1, 0, 0, 0, 0, 0), (0, 1, 0, 0, 0, 0), (0, 0, 1, 0, 0, 0), (0, 0, 0, 2, 0, 0), (0, 0, 0, 0, 2, 0), (0, 0, 0, 0, 0, 2), ] if order == 3: return [ (1, 0, 0, 0, 0, 0), (0, 1, 0, 0, 0, 0), (0, 0, 1, 0, 0, 0), (0, 0, 0, 2, 0, 0), (0, 0, 0, 0, 2, 0), (0, 0, 0, 0, 0, 2), (1, 1, 0, 0, 0, 0), (1, 0, 1, 0, 0, 0), (1, 0, 0, 2, 0, 0), (1, 0, 0, 0, 2, 0), (0, 1, 1, 0, 0, 0), (0, 0, 0, 2, 2, 0), (0, 0, 0, 2, 0, 2), (0, 0, 0, 0, 2, 2), ] raise ValueError( "only deformations for 2nd and 3rd order elastic tensors are supported." )