def requirevtk(code=0, parallel=False): from ase.test import NotAvailable if not hasvtk: # VTK required but not installed, force termination # with exit status determined by the code argument. raise NotAvailable('VTK is not installed.', code) if parallel and not hasmpi: # VTK MPI required but not installed, force termination # with exit status determined by the code argument. raise NotAvailable('VTK is not MPI compatible.', code)
def installed(): import os from ase.test import NotAvailable dcmd = os.getenv('DFTB_COMMAND') dpre = os.getenv('DFTB_PREFIX') if dcmd == None: raise NotAvailable('DFTB_COMMAND not defined') if dpre == None: raise NotAvailable('DFTB_PREFIX not defined (for slater koster files)') return True
def main(): if "ASE_CP2K_COMMAND" not in os.environ: raise NotAvailable('$ASE_CP2K_COMMAND not defined') # Basically, the entire CP2K input is passed in explicitly. # Disable ASE's input generation by setting everything to None. # ASE should only add the CELL and the COORD section. calc = CP2K(basis_set=None, basis_set_file=None, max_scf=None, cutoff=None, force_eval_method=None, potential_file=None, poisson_solver=None, pseudo_potential=None, stress_tensor=False, xc=None, label='test_H2_inp', inp=inp) h2 = molecule('H2', calculator=calc) h2.center(vacuum=2.0) energy = h2.get_potential_energy() energy_ref = -30.6989595886 diff = abs((energy - energy_ref) / energy_ref) assert diff < 1e-10 print('passed test "H2_None"')
def installed(): import os from ase.test import NotAvailable vcmd = os.getenv('VASP_COMMAND') vscr = os.getenv('VASP_SCRIPT') if vcmd == None and vscr == None: raise NotAvailable('Neither VASP_COMMAND nor VASP_SCRIPT defined') return True
def main(): if sys.version_info < (2, 7): raise NotAvailable('read_xml requires Python version 2.7 or greater') assert installed() # simple test calculation of CO molecule d = 1.14 co = Atoms('CO', positions=[(0, 0, 0), (0, 0, d)], pbc=True) co.center(vacuum=5.) calc = Vasp(xc='LDA', prec='Low', algo='Fast', ismear=0, sigma=1., nbands=12, istart=0, nelm=3, lwave=False, lcharg=False, ldipol=True) co.set_calculator(calc) energy = co.get_potential_energy() forces = co.get_forces() dipole_moment = co.get_dipole_moment() # check that parsing of vasprun.xml file works conf = read('vasprun.xml') assert conf.calc.parameters['kpoints_generation'] assert conf.calc.parameters['sigma'] == 1.0 assert conf.calc.parameters['ialgo'] == 68 assert energy - conf.get_potential_energy() == 0.0 # Check some arrays assert np.allclose(conf.get_forces(), forces) assert np.allclose(conf.get_dipole_moment(), dipole_moment, atol=1e-6) # Check k-point-dependent properties assert len(conf.calc.get_eigenvalues(spin=0)) >= 12 assert conf.calc.get_occupation_numbers()[2] == 2 assert conf.calc.get_eigenvalues(spin=1) is None kpt = conf.calc.get_kpt(0) assert kpt.weight == 1. # Perform a spin-polarised calculation co.calc.set(ispin=2, ibrion=-1) co.get_potential_energy() conf = read('vasprun.xml') assert len(conf.calc.get_eigenvalues(spin=1)) >= 12 assert conf.calc.get_occupation_numbers(spin=1)[0] == 1. # Cleanup calc.clean()
def installed2(): # Check if env variables exist for Vasp2 import os from ase.test import NotAvailable vcmd = os.getenv('VASP_COMMAND') vscr = os.getenv('VASP_SCRIPT') vase = os.getenv('ASE_VASP_COMMAND') if vcmd is None and vscr is None and vase is None: raise NotAvailable( 'Neither ASE_VASP_COMMAND, VASP_COMMAND nor VASP_SCRIPT defined') return True
def main(): if "ASE_CP2K_COMMAND" not in os.environ: raise NotAvailable('$ASE_CP2K_COMMAND not defined') calc = CP2K(label='test_H2_LDA') h2 = molecule('H2', calculator=calc) h2.center(vacuum=2.0) energy = h2.get_potential_energy() energy_ref = -30.6989595886 diff = abs((energy - energy_ref) / energy_ref) assert diff < 1e-10 print('passed test "H2_LDA"')
def main(): if "ASE_CP2K_COMMAND" not in os.environ: raise NotAvailable('$ASE_CP2K_COMMAND not defined') calc = CP2K() h2 = molecule('H2', calculator=calc) h2.center(vacuum=2.0) h2.get_potential_energy() calc.write('test_restart') # write a restart calc2 = CP2K(restart='test_restart') # load a restart assert not calc2.calculation_required(h2, ['energy']) print('passed test "restart"')
def main(): if "ASE_CP2K_COMMAND" not in os.environ: raise NotAvailable('$ASE_CP2K_COMMAND not defined') calc = CP2K(label='test_O2', uks=True, cutoff=150 * units.Rydberg, basis_set="SZV-MOLOPT-SR-GTH") o2 = molecule('O2', calculator=calc) o2.center(vacuum=2.0) energy = o2.get_potential_energy() energy_ref = -861.057011375 diff = abs((energy - energy_ref) / energy_ref) assert diff < 1e-10 print('passed test "O2"')
def main(): if "ASE_CP2K_COMMAND" not in os.environ: raise NotAvailable('$ASE_CP2K_COMMAND not defined') calc = CP2K(xc='XC_GGA_X_PBE XC_GGA_C_PBE', pseudo_potential="GTH-PBE", label='test_H2_libxc') h2 = molecule('H2', calculator=calc) h2.center(vacuum=2.0) energy = h2.get_potential_energy() energy_ref = -31.591716529642 diff = abs((energy - energy_ref) / energy_ref) assert diff < 1e-10 print('passed test "H2_libxc"')
def plot(self, name=''): """Plot the individual curves""" try: import matplotlib.pyplot as plt except ImportError: raise NotAvailable('This needs matplotlib module.') if self.form == 'eam' or self.form == 'alloy': nrow = 2 elif self.form == 'adp': nrow = 3 else: raise RuntimeError('Unknown form of potential: %s' % self.form) if hasattr(self, 'r'): r = self.r else: r = np.linspace(0, self.cutoff, 50) if hasattr(self, 'rho'): rho = self.rho else: rho = np.linspace(0, 10.0, 50) plt.subplot(nrow, 2, 1) self.elem_subplot(rho, self.embedded_energy, r'$\rho$', r'Embedding Energy $F(\bar\rho)$', name, plt) plt.subplot(nrow, 2, 2) self.elem_subplot(r, self.electron_density, r'$r$', r'Electron Density $\rho(r)$', name, plt) plt.subplot(nrow, 2, 3) self.multielem_subplot(r, self.phi, r'$r$', r'Pair Potential $\phi(r)$', name, plt) plt.ylim(-1.0, 1.0) # need reasonable values if self.form == 'adp': plt.subplot(nrow, 2, 5) self.multielem_subplot(r, self.d, r'$r$', r'Dipole Energy', name, plt) plt.subplot(nrow, 2, 6) self.multielem_subplot(r, self.q, r'$r$', r'Quadrupole Energy', name, plt) plt.plot()
def installed(): import os from ase.test import NotAvailable # check if CASTEP_COMMAND is set a environment variable if not os.environ.has_key('CASTEP_COMMAND'): print("WARNING: Environment variable CASTEP_COMMAND is not set") print("Will set CASTEP_COMMAND = castep for the sake of this test") print( "Please change it if this does not run castep in your environment") os.environ['CASTEP_COMMAND'] = 'castep' if not (os.system( 'which %s > /dev/null 2>&1' % os.environ['CASTEP_COMMAND']) == 0): raise NotAvailable("""Could not find CASTEP. If you have it installed make sure, you set the CASTEP_COMMAND environment variable correctly""") return True
def main(): if "ASE_CP2K_COMMAND" not in os.environ: raise NotAvailable('$ASE_CP2K_COMMAND not defined') inp = """&FORCE_EVAL &DFT &QS LS_SCF ON &END QS &END DFT &END FORCE_EVAL""" calc = CP2K(label='test_H2_LS', inp=inp) h2 = molecule('H2', calculator=calc) h2.center(vacuum=2.0) energy = h2.get_potential_energy() energy_ref = -30.6989581747 diff = abs((energy - energy_ref) / energy_ref) assert diff < 5e-7 print('passed test "H2_LS"')
def main(): if "ASE_CP2K_COMMAND" not in os.environ: raise NotAvailable('$ASE_CP2K_COMMAND not defined') calc = CP2K(label='test_H2_GOPT') atoms = molecule('H2', calculator=calc) atoms.center(vacuum=2.0) # Run Geo-Opt gopt = BFGS(atoms, logfile=None) gopt.run(fmax=1e-6) # check distance dist = atoms.get_distance(0, 1) dist_ref = 0.7245595 assert (dist - dist_ref) / dist_ref < 1e-7 # check energy energy_ref = -30.7025616943 energy = atoms.get_potential_energy() assert (energy - energy_ref) / energy_ref < 1e-10 print('passed test "H2_GEO_OPT"')
def main(): if "ASE_CP2K_COMMAND" not in os.environ: raise NotAvailable('$ASE_CP2K_COMMAND not defined') calc = CP2K(label='test_H2_MD') positions = [(0, 0, 0), (0, 0, 0.7245595)] atoms = Atoms('HH', positions=positions, calculator=calc) atoms.center(vacuum=2.0) # Run MD MaxwellBoltzmannDistribution(atoms, 0.5 * 300 * units.kB, force_temp=True) energy_start = atoms.get_potential_energy() + atoms.get_kinetic_energy() dyn = VelocityVerlet(atoms, 0.5 * units.fs) #def print_md(): # energy = atoms.get_potential_energy() + atoms.get_kinetic_energy() # print("MD total-energy: %.10feV" % energy) #dyn.attach(print_md, interval=1) dyn.run(20) energy_end = atoms.get_potential_energy() + atoms.get_kinetic_energy() assert energy_start - energy_end < 1e-4 print('passed test "H2_MD"')
def main(): if sys.version_info < (2, 7): raise NotAvailable('read_xml requires Python version 2.7 or greater') assert installed() # simple test calculation of CO molecule d = 1.14 co = Atoms('CO', positions=[(0, 0, 0), (0, 0, d)], pbc=True) co.center(vacuum=5.) calc = Vasp(xc='PBE', prec='Low', algo='Fast', ismear=0, sigma=1., istart=0, lwave=False, lcharg=False, ldipol=True) co.set_calculator(calc) energy = co.get_potential_energy() forces = co.get_forces() dipole_moment = co.get_dipole_moment() # check that parsing of vasprun.xml file works conf = read('vasprun.xml') assert conf.calc.parameters['kpoints_generation'] assert conf.calc.parameters['sigma'] == 1.0 assert conf.calc.parameters['ialgo'] == 68 assert energy - conf.get_potential_energy() == 0.0 assert np.allclose(conf.get_forces(), forces) assert np.allclose(conf.get_dipole_moment(), dipole_moment, atol=1e-6) # Cleanup calc.clean()
def installed(): import os import subprocess from ase.test import NotAvailable # check if CASTEP_COMMAND is set an environment variable if 'CASTEP_COMMAND' not in os.environ: print("WARNING: Environment variable CASTEP_COMMAND is not set") print("Will set CASTEP_COMMAND = castep for the sake of this test") print( "Please change it if this does not run castep in your environment") os.environ['CASTEP_COMMAND'] = 'castep' try: # not python 2.6-safe #subprocess.check_output([os.environ['CASTEP_COMMAND']]) devnull = open(os.devnull) subprocess.Popen([os.environ['CASTEP_COMMAND']], stdout=devnull, stderr=devnull) except OSError: raise NotAvailable("""Could not find CASTEP. If you have it installed make sure, you set the CASTEP_COMMAND environment variable correctly""") return True
def main(): """add the following line in .bash_profile and source the .bash_profile to define the varialbe "ASE_CP2K_COMMAND": export ASE_CP2K_COMMAND="mpiexec.hydra -n NCORES cp2k_shell.popt" where NCORES is the total number of cores used for calculation. mpiexec.hydra is the mpi command used for the parrallel running. """ if "ASE_CP2K_COMMAND" not in os.environ: raise NotAvailable('$ASE_CP2K_COMMAND not defined') # Basically, the entire CP2K input is passed in explicitly. # Disable ASE's input generation by setting everything to None. # ASE should only add the CELL and the COORD section. calc = CP2K(basis_set=None, basis_set_file=None, max_scf=None, cutoff=None, force_eval_method=None, potential_file=None, poisson_solver=None, pseudo_potential=None, stress_tensor=False, xc=None, label='N2O4-NH4', inp=inp)
from ase.test import NotAvailable try: import cmr except ImportError: raise NotAvailable('CMR is required') from cmr.ui import DirectoryReader from cmr.test.examples.ase_reaction_energy import ASEReactionEnergy # see the module for the required format of reactions definition from ase.test.cmr.reactions import reactions from ase.test.cmr.reactions import reference # assure that all reactions define a reaction_id for r in reactions: assert r[-1][0] == 'reaction_id' # project id: must uniquely identify the project! project_id = 'EMT' + ' reaction energies' # if True, then results are uploaded to the database database = False # create assisting class for project with project_id, # that allows one to convert trajectory files into # db-files and perform analysis re = ASEReactionEnergy(project_id, reactions, prefix='', verbose=False) # compounds names
import os from ase.test import NotAvailable try: nwchem_command = os.getenv('NWCHEM_COMMAND') if nwchem_command == None: raise NotAvailable('NWCHEM_COMMAND not defined') except NotAvailable: raise NotAvailable('Nwchem required') import numpy as np from ase.tasks.main import run atoms, task = run("nwchem molecule O2 O -l -p task=gradient") atoms, task = run('nwchem molecule O2 O -s') ae = 2 * task.data['O']['energy'] - task.data['O2']['energy'] assert abs(ae - 6.605) < 1e-3
import os from ase.test import NotAvailable try: fleur = os.getenv('FLEUR') if fleur == None: raise NotAvailable('FLEUR not defined') except NotAvailable: raise NotAvailable('Fleur required') import numpy as np from ase.tasks.main import run atoms, task = run("fleur bulk Al -x fcc -a 4.04 --k-point-density=3.0 -p xc=PBE") atoms, task = run('fleur bulk Al -s')
try: import scipy except ImportError: from ase.test import NotAvailable raise NotAvailable('This test needs scipy module.') import numpy as np from ase.io import read, PickleTrajectory from ase.lattice import bulk from ase.calculators.emt import EMT a0 = 3.52 / np.sqrt(2) c0 = np.sqrt(8 / 3.0) * a0 print '%.4f %.3f' % (a0, c0 / a0) for i in range(3): traj = PickleTrajectory('Ni.traj', 'w') eps = 0.01 for a in a0 * np.linspace(1 - eps, 1 + eps, 4): for c in c0 * np.linspace(1 - eps, 1 + eps, 4): ni = bulk('Ni', 'hcp', a=a, covera=c / a) ni.set_calculator(EMT()) ni.get_potential_energy() traj.write(ni) configs = read('Ni.traj@:') energies = [config.get_potential_energy() for config in configs] ac = [(config.cell[0, 0], config.cell[2, 2]) for config in configs] from ase.optimize import polyfit p = polyfit(ac, energies) from scipy.optimize import fmin_bfgs a0, c0 = fmin_bfgs(p, (a0, c0))
from ase.test import NotAvailable import ase.io.netcdftrajectory as netcdftrajectory if not netcdftrajectory.have_nc: raise NotAvailable('No NetCDF module available (netCDF4-python, ' 'scipy.io.netcdf)') import os from ase import Atom, Atoms from ase.io import NetCDFTrajectory co = Atoms([Atom('C', (0, 0, 0)), Atom('O', (0, 0, 1.2))], pbc=True) traj = NetCDFTrajectory('1.nc', 'w', co) for i in range(5): co.positions[:, 2] += 0.1 traj.write() del traj if netcdftrajectory.have_nc == netcdftrajectory.NC_IS_NETCDF4: traj = NetCDFTrajectory('1.nc', 'a') co = traj[-1] print(co.positions) co.positions[:] += 1 traj.write(co) del traj t = NetCDFTrajectory('1.nc', 'a') else: t = NetCDFTrajectory('1.nc', 'r') print(t[-1].positions) print('.--------')
# do some tests here before we import # Right version of Scientific? from ase.test import NotAvailable import os try: import Scientific version = Scientific.__version__.split(".") print 'Found ScientificPython version: ', Scientific.__version__ if map(int, version) < [2, 8]: print 'ScientificPython 2.8 or greater required for numpy support in NetCDF' raise NotAvailable( 'ScientificPython version 2.8 or greater is required') except (ImportError, NotAvailable): print "No Scientific python found. Check your PYTHONPATH" raise NotAvailable('ScientificPython version 2.8 or greater is required') if not (os.system('which dacapo.run') == 0): print "No Dacapo Fortran executable (dacapo.run) found. Check your path settings." raise NotAvailable( 'dacapo.run is not installed on this machine or not in the path') # Now Scientific 2.8 and dacapo.run should both be available from ase import Atoms, Atom from ase.calculators.jacapo import Jacapo atoms = Atoms([Atom('H', [0, 0, 0])], cell=(2, 2, 2)) calc = Jacapo('Jacapo-test.nc', pw=200, nbands=2,
import sys from ase.test import NotAvailable, must_raise if sys.platform in ['win32']: raise NotAvailable('Fails on Windows ' 'https://trac.fysik.dtu.dk/projects/ase/ticket/62') import os from ase import Atom, Atoms from ase.io import Trajectory, read from ase.constraints import FixBondLength co = Atoms([Atom('C', (0, 0, 0)), Atom('O', (0, 0, 1.2))]) traj = Trajectory('1.traj', 'w', co) for i in range(5): co.positions[:, 2] += 0.1 traj.write() traj = Trajectory('1.traj', 'a') co = read('1.traj') print(co.positions) co.positions[:] += 1 traj.write(co) for a in Trajectory('1.traj'): print(1, a.positions[-1, 2]) co.positions[:] += 1 t = Trajectory('1.traj', 'a') t.write(co)
#!/usr/bin/python """ Run some VASP tests to ensure that the VASP calculator works. This is conditional on the existence of the VASP_COMMAND or VASP_SCRIPT environment variables """ from ase.test import NotAvailable import os vcmd = os.getenv('VASP_COMMAND') vscr = os.getenv('VASP_SCRIPT') if vcmd == None and vscr == None: raise NotAvailable('Neither VASP_COMMAND nor VASP_SCRIPT defined') from ase import Atoms from ase.calculators.vasp import Vasp import numpy as np def array_almost_equal(a1, a2, tol=np.finfo(type(1.0)).eps): """Replacement for old numpy.testing.utils.array_almost_equal.""" return (np.abs(a1 - a2) < tol).all() d = 1.14 co = Atoms('CO', positions=[(0, 0, 0), (0, 0, d)], pbc=True) co.center(vacuum=5.) calc = Vasp(xc='PBE',
if not os.path.exists('calcDelta.py'): try: resp = urllib.request.urlopen(src) urllib.request.urlretrieve(src, filename=name) z = zipfile.ZipFile(name) try: # new in 2.6 z.extractall() except AttributeError: # http://stackoverflow.com/questions/7806563/how-to-unzip-a-zip-file-with-python-2-4 for f in z.namelist(): fd = open(f, "w") fd.write(z.read(f)) fd.close() # AttributeError if unzip not found except (urllib.error.HTTPError, AttributeError): raise NotAvailable('Retrieval of zip failed') os.chdir('..') task = Task( tag=tag, use_lock_files=True, ) # header h = ['#element', 'V0', 'B0', 'B1'] if not os.path.exists('%s_raw.csv' % tag): # read calculated results from json file and write into csv task.read() task.analyse()
from ase.test import NotAvailable from ase.calculators.mopac import Mopac if Mopac().get_command() is None: raise NotAvailable('MOPAC required') from ase.tasks.main import run atoms, task = run("mopac molecule O2 O") atoms, task = run('mopac molecule O2 O -s') ae = 2 * task.data['O']['energy'] - task.data['O2']['energy'] print ae assert abs(ae - 12.658) < 1e-3
"""Check reading of a sample v_sim .ascii file, and I/O consistency""" try: from urllib.request import urlretrieve from urllib.error import URLError except ImportError: from urllib import urlretrieve from urllib2 import URLError from socket import error as SocketError from ase.test import NotAvailable from ase.io import read raise NotAvailable('The web site which this test depends upon. ' 'TODO: Let us not depend on external websites.') dest = 'demo.ascii' src = 'http://inac.cea.fr/L_Sim/V_Sim/files/' + dest copy = 'demo2.ascii' try: urlretrieve(src, filename=dest) except (IOError, URLError, SocketError): raise NotAvailable('Retrieval of ' + src + ' failed') atoms = read(dest, format='v-sim') atoms.write(copy) atoms2 = read(copy) tol = 1e-6
""" test run for gromacs calculator """ from ase.test import NotAvailable from ase.calculators.gromacs import Gromacs if Gromacs().get_command() is None: raise NotAvailable( 'Gromacs required, setup your GMXCMD environmental variable') GRO_INIT_FILE = 'hise_box.gro' # write structure file outfile = open('hise_box.gro', 'w') outfile.write('HISE for testing \n') outfile.write(' 20 \n') outfile.write(' 3HISE N 1 1.966 1.938 1.722 \n') outfile.write(' 3HISE H1 2 2.053 1.892 1.711 \n') outfile.write(' 3HISE H2 3 1.893 1.882 1.683 \n') outfile.write(' 3HISE H3 4 1.969 2.026 1.675 \n') outfile.write(' 3HISE CA 5 1.939 1.960 1.866 \n') outfile.write(' 3HISE HA 6 1.934 1.869 1.907 \n') outfile.write(' 3HISE CB 7 2.055 2.041 1.927 \n') outfile.write(' 3HISE HB1 8 2.141 2.007 1.890 \n') outfile.write(' 3HISE HB2 9 2.043 2.137 1.903 \n') outfile.write(' 3HISE ND1 10 1.962 2.069 2.161 \n') outfile.write(' 3HISE CG 11 2.065 2.032 2.077 \n') outfile.write(' 3HISE CE1 12 2.000 2.050 2.287 \n') outfile.write(' 3HISE HE1 13 1.944 2.069 2.368 \n') outfile.write(' 3HISE NE2 14 2.123 2.004 2.287 \n') outfile.write(' 3HISE HE2 15 2.177 1.981 2.369 \n') outfile.write(' 3HISE CD2 16 2.166 1.991 2.157 \n')