Source code for aiida_pythonjob_ins.data.force_constants
"""AiiDA Data node wrapping a Euphonic ``ForceConstants`` object.
``ForceConstants`` is the primary *input* object for lattice-dynamics workflows:
it holds the interatomic force constants (plus crystal + optional dipole data)
from which phonons at arbitrary q-points are interpolated.
https://euphonic.readthedocs.io/en/stable/force-constants.html
"""
from __future__ import annotations
from pathlib import Path
from typing import ClassVar, Self
from euphonic import ForceConstants
from .base import EuphonicJSONData
from .mixins import CrystalStructureMixin
[docs]
class ForceConstantsData(CrystalStructureMixin, EuphonicJSONData):
"""Store a Euphonic ``ForceConstants`` object as an AiiDA node."""
_euphonic_cls: ClassVar[type] = ForceConstants
[docs]
def get_force_constants(self) -> ForceConstants:
"""Return the wrapped :class:`euphonic.ForceConstants`."""
return self.get_object()
[docs]
@classmethod
def from_castep(cls, filepath: str | Path) -> Self:
"""Build a node by reading a CASTEP ``.castep_bin``/``.check`` file.
Uses the public reader ``ForceConstants.from_castep``.
"""
return cls(ForceConstants.from_castep(str(filepath)))
[docs]
@classmethod
def from_phonopy(cls, **kwargs) -> Self:
"""Build a node from Phonopy output via ``ForceConstants.from_phonopy``.
Requires the optional ``phonopy`` extra. Keyword arguments are forwarded
(e.g. ``path``, ``summary_name``, ``fc_name``).
"""
return cls(ForceConstants.from_phonopy(**kwargs))