ACE-Molecule

ACE-Molecule ACE-Molecule, whitch stands for Advanced Computational Engine for Molecule, is a quantum chemistry package based on a real-space numerical grid. The package aims to carry out accurate and fast electronic structure calculations for large molecular systems. The present main features include ground-state DFT calculations using LDA, GGA, and hybrid functionals with an exact-exchange potential under the KLI approximation, atomic force calculations, and excited state calculations using linear-response TD-DFT, CIS, and CISD methods.

The ASE calculator is an interface to the ace executable.

Setup

A simple calculation can be set up:

import sys
from ase.io import read
from ase.calculators.acemolecule import ACE

label = sys.argv[1]
mol= read('H2.xyz')
basic_list = {'Cell' : 12.0}
ace = ACE(label=label, BasicInformation = basic_list)
mol.calc = ace
print (mol.get_potential_energy())

A Force calculation can be set up:

import sys
from ase.io import read
from ase.calculators.acemolecule import ACE

basic_list = {'Cell' : 12.0 ,'Pseudopotential' : {'Pseudopotential' : 1, 'Format' : 'upf', 'PSFilePath' : '/PATH/TO/UPF/FILES', 'PSFileSuffix' : '.pbe-theos.UPF'} }
label = sys.argv[1]
mol= read('H2.xyz')
order_list = ["BasicInformation", "Guess", "Scf", "Force"]
ace = ACE(label=label, BasicInformation = basic_list, order = order_list)
mol.calc = ace
print (mol.get_forces())

A Geometry optimization calculation can be set up:

import sys
from ase.io import read
from ase.calculators.acemolecule import ACE
from ase.optimize import BFGS

basic_list = {'Cell' : 12.0, 'Pseudopotential' : {'Pseudopotential' : 1, 'Format' : 'upf', 'PSFilePath' : '/PATH/TO/UPF/FILES', 'PSFileSuffix' : '.pbe-theos.UPF'} }
label = sys.argv[1]
mol= read('H2.xyz')
order_list = ["BasicInformation", "Guess", "Scf", "Force"]
ace = ACE(label=label, BasicInformation = basic_list, order = order_list)
mol.calc = ace
g_opt = BFGS(mol)
g_opt.run(fmax=0.05)
print ("OPT is end")

A TDDFT calculation can be set up:

import sys
from ase.io import read
from ase.calculators.acemolecule import ACE
from ase.optimize import BFGS

label = sys.argv[1]
mol= read('H2.xyz')
basic_list = {'Cell' : 12.0}
order_list = ["BasicInformation", "Guess", "Scf", "TDDFT"]
scf_list = [dict(FinalDiagonalize = dict(NumberOfEigenvalues= 12))]
ace = ACE(label=label, BasicInformation = basic_list, Scf= scf_list, order = order_list)
mol.calc = ace
print (ace.get_property('excitation-energy', mol))

Parameters

The calculator will interpret any of the documented options for ace: https://gitlab.com/aceteam.kaist/ACE-Molecule/tree/master/vars

By default, this calculator sets simple SCF calculations (Including BasicInformation, Guess, and Scf section). If you want to do force or excited state calculations, or change exchange-correlation functionals, you need to change input parameters. Parameters can be given as keywords and the calculator will put them into the corresponding section of the input file. Each (sub)section is represented as dictionary.

An example for updating parameters:

basic = dict(Cell = 12.0, VerboseLevel = 2)
ace.set(BasicInformation = basic)

An example for updating subsection parameters:

ace.set(Scf = {"ExchangeCorrelation": {"XFunctional": "LDA_X", "CFunctional": "LDA_C_PZ"}})