Coverage for mchammer/observers/constituent_strain_observer.py: 100%
11 statements
« prev ^ index » next coverage.py v7.5.0, created at 2024-12-26 04:12 +0000
« prev ^ index » next coverage.py v7.5.0, created at 2024-12-26 04:12 +0000
1from mchammer.observers.base_observer import BaseObserver
2from icet.tools import ConstituentStrain
3from ase import Atoms
6class ConstituentStrainObserver(BaseObserver):
7 """This class represents a constituent strain observer. It allows
8 observation of constituent strain energy separate from the energy
9 calculated by the cluster expansion.
11 Parameters
12 ----------
13 constituent_strain
14 :class:`ConstituentStrain` object.
15 interval
16 Observation interval. Defaults to ``None`` meaning that if the
17 observer is used in a Monte Carlo simulations, then the :class:`Ensemble` object
18 will determine the interval.
19 """
21 def __init__(self,
22 constituent_strain: ConstituentStrain,
23 interval: int = None) -> None:
24 super().__init__(interval=interval, return_type=dict, tag='ConstituentStrainObserver')
25 self.constituent_strain = constituent_strain
27 def get_observable(self, structure: Atoms) -> dict:
28 """Returns the constituent strain energy for a given atomic configuration.
30 Parameters
31 ----------
32 structure
33 Input atomic structure.
34 """
35 cs = self.constituent_strain.get_constituent_strain(structure.get_atomic_numbers())
36 cs = {'constituent_strain_energy': cs * len(structure)}
37 return cs