Source code for clease.montecarlo.observers.energy_evolution_obs

import logging
import numpy as np
from clease.tools import add_file_extension
from .mc_observer import MCObserver

logger = logging.getLogger(__name__)


[docs]class EnergyEvolution(MCObserver): """Trace the evolution of energy.""" name = "EnergyEvolution" def __init__(self, mc, ignore_reset=False): super().__init__() self.mc = mc self.energies = [] self.mean_energies = [] self.ignore_reset = ignore_reset def __call__(self, system_changes): """Append the current energy to the MC object. Parameters: system_changes: list System changes. See doc-string of `clease.montecarlo.observers.MCObserver` """ self.energies.append(self.mc.current_energy) self.mean_energies.append(self.mc.mean_energy.mean)
[docs] def reset(self): """Reset the history.""" if self.ignore_reset: return self.energies = []
[docs] def save(self, fname: str = "energy_evolution.csv") -> None: """Save the energy evolution in .csv file. :param fname: File name of .csv file. Adds extension if none is given. """ full_fname = add_file_extension(fname, ".csv") np.savetxt(full_fname, self.energies, delimiter=",") logger.info("Energy evolution data saved to %s.", full_fname)