# coding: utf-8
# Distributed under the terms of the MIT License.
""" This file implements the abstract Calculator class for use
with compute.
"""
import abc
from matador.utils.errors import CalculationError
[docs]class Calculator:
""" Base class for Calculator objects, with some useful methods and
abstract methods.
"""
def __init__(self, calculation_parameters):
self._initial_calculation_parameters = {}
self._task = calculation_parameters['task']
[docs] @staticmethod
@abc.abstractmethod
def verify_calculation_parameters(calculation_parameters, structure):
""" Verify if the parameters passed make sense for this calculator.
Mutates the input dict if required.
Parameters:
calculation_parameters (dict): contains global parameters, i.e.
non-structure-specific parameters.
structure (dict): contains the structure.
Raises:
InputError: if verification fails, with a (hopefully) helpful message.
"""
return
[docs] @staticmethod
def verify_simulation_cell(structure):
""" Run some checks on the structure.
Parameters:
structure (dict): dictionary containing the structure.
Raises:
CalculationError: if cell is pathological.
"""
errors = []
if all([angle < 30 for angle in structure['lattice_abc'][1]]):
msg = 'Cell is pathological (at least one angle < 30).'
errors.append(msg)
# TODO: check overlapping atoms
if errors:
raise CalculationError('. '.join(errors))
[docs] def do_memcheck(self):
""" If possible, do a dryrun of the code to estimate memory usage.
Returns:
int: estimated memory usage in MB. 0 if method not implemented.
"""