#!/usr/bin/env python

# definition of CALCULATORS for qmx-setup
#
# Torsten Kerber, ENS LYON: 2011, 07, 11
#
# This work is supported by Award No. UK-C0017, made by King Abdullah
# University of Science and Technology (KAUST)

from qmxDEF import Definition

#-------------------------------------------------------------------------------
#--- PRG DEFINITIONS -----------------------------------------------------------
#-------------------------------------------------------------------------------
class VASPCalcDefinition(Definition):
    def __init__(self):
        self.name='VASP'
        self.keywords = {}
        self.keywords['import']='ase.calculators.vasp'
        self.keywords['class']='Vasp'
        self.keywords['class.options']='write_input=False'

#-------------------------------------------------------------------------------
class TURBOMOLECalcDefinition(Definition):
    def __init__(self):
        self.name='TURBOMOLE'
        self.keywords = {}
        self.keywords['import']='ase.calculators.turbomole'
        self.keywords['class']='Turbomole'

#-------------------------------------------------------------------------------
class MOPACCalcDefinition(Definition):
    def __init__(self):
        self.name='MOPAC'
        self.keywords = {}
        self.keywords['import']='ase.calculators.mopac'
        self.keywords['class']='Mopac'
        self.keywords['class.options']='functional="PM6"'

#-------------------------------------------------------------------------------
class QmxCalcDefinition(Definition):
    def __init__(self):
        self.name='QMX'
        self.system='Qmx'
        self.keywords = {}
        self.keywords['import']='ase.calculators.qmx'
        self.keywords['class']='Qmx'
        self.keywords['class.options']='high_level, low_level'

#-------------------------------------------------------------------------------
class LJCalcDefinition(Definition):
    def __init__(self):
        self.name='Lennard Jones'
        self.system='LJ'
        self.keywords = {}
        self.keywords['import']='ase.calculators.lj'
        self.keywords['class']='LennardJones'

#-------------------------------------------------------------------------------
class EMTCalcDefinition(Definition):
    def __init__(self):
        self.name='EMT'
        self.system='EMT'
        self.keywords = {}
        self.keywords['import']='ase.calculators.emt'
        self.keywords['class']='EMT'

#-------------------------------------------------------------------------------
class SiestaCalcDefinition(Definition):
    def __init__(self):
        self.name='Siesta'
        self.system='Siesta'
        self.keywords = {}
        self.keywords['import']='ase.calculators.siesta'
        self.keywords['class']='Siesta'

#-------------------------------------------------------------------------------
class DacapoCalcDefinition(Definition):
    def __init__(self):
        self.name='Dacapo'
        self.system='Dacapo'
        self.keywords = {}
        self.keywords['import']='ase.calculators.dacapo'
        self.keywords['class']='Dacapo'

#-------------------------------------------------------------------------------
class AimsCubeCalcDefinition(Definition):
    def __init__(self):
        self.name='AimsCube'
        self.system='AimsCube'
        self.keywords = {}
        self.keywords['import']='ase.calculators.ase'
        self.keywords['class']='AimsCube'

#-------------------------------------------------------------------------------
class AimsCalcDefinition(Definition):
    def __init__(self):
        self.name='Aims'
        self.system='Aims'
        self.keywords = {}
        self.keywords['import']='ase.calculators.aims'
        self.keywords['class']='Aims'

#-------------------------------------------------------------------------------
class ExcitingCalcDefinition(Definition):
    def __init__(self):
        self.name='Exciting'
        self.system='Exciting'
        self.keywords = {}
        self.keywords['import']='ase.calculators.exciting'
        self.keywords['class']='Exciting'

#-------------------------------------------------------------------------------
class DftbCalcDefinition(Definition):
    def __init__(self):
        self.name='Dftb'
        self.system='Dftb'
        self.keywords = {}
        self.keywords['import']='ase.calculators.dftb'
        self.keywords['class']='Dftb'

#-------------------------------------------------------------------------------
class GaussianCalcDefinition(Definition):
    def __init__(self):
        self.name='Gaussian'
        self.system='Gaussian'
        self.keywords = {}
        self.keywords['import']='ase.calculators.gaussian'
        self.keywords['class']='Gaussian'

calcDefinitions = \
  [ VASPCalcDefinition(), TURBOMOLECalcDefinition(), MOPACCalcDefinition(), LJCalcDefinition(), \
    EMTCalcDefinition(), SiestaCalcDefinition(), DacapoCalcDefinition(), AimsCubeCalcDefinition(), \
    AimsCalcDefinition(), ExcitingCalcDefinition(), DftbCalcDefinition(), GaussianCalcDefinition() ]
