Beispiel #1
0
def bhopt(atoms=None,
          gen='poscar.gen',
          fmax=0.3,
          step=100,
          dr=0.5,
          temperature=100,
          optimizer=BFGS,
          vdwnn=False,
          nn=True,
          v=False):
    if atoms is None:
        atoms = read(gen)
    atoms.calc = IRFF(atoms=atoms,
                      libfile='ffield.json',
                      rcut=None,
                      nn=nn,
                      vdwnn=vdwnn)

    optimizer = BasinHopping(
        atoms=atoms,  # the system to optimize
        temperature=temperature * kB,  # 'temperature' to overcome barriers
        dr=dr,  # maximal stepwidth
        optimizer=optimizer,
        fmax=fmax,  # maximal force for the optimizer
        trajectory="opt.traj")
    optimizer.run(step)
    if v:
        images = Trajectory('opt.traj')
        view(images[-1])
    return atoms
Beispiel #2
0
def test_basin():
    # Global minima from
    # Wales and Doye, J. Phys. Chem. A, vol 101 (1997) 5111-5116
    E_global = {4: -6.000000, 5: -9.103852, 6: -12.712062, 7: -16.505384}
    N = 7
    R = N**(1. / 3.)
    np.random.seed(42)
    pos = np.random.uniform(-R, R, (N, 3))
    s = Atoms('He' + str(N), positions=pos)
    s.calc = LennardJones()
    original_positions = 1. * s.get_positions()

    ftraj = 'lowest.traj'

    for GlobalOptimizer in [
            BasinHopping(s,
                         temperature=100 * kB,
                         dr=0.5,
                         trajectory=ftraj,
                         optimizer_logfile=None)
    ]:

        if isinstance(GlobalOptimizer, BasinHopping):
            GlobalOptimizer.run(10)
            Emin, smin = GlobalOptimizer.get_minimum()
        else:
            GlobalOptimizer(totalsteps=10)
            Emin = s.get_potential_energy()
            smin = s
        print("N=", N, 'minimal energy found', Emin, ' global minimum:',
              E_global[N])

        # recalc energy
        smin.calc = LennardJones()
        E = smin.get_potential_energy()
        assert abs(E - Emin) < 1e-15
        other = read(ftraj)
        E2 = other.get_potential_energy()
        assert abs(E2 - Emin) < 1e-15

        # check that only minima were written
        last_energy = None
        for im in io.read(ftraj, index=':'):
            energy = im.get_potential_energy()
            if last_energy is not None:
                assert energy < last_energy
            last_energy = energy

        # reset positions
        s.set_positions(original_positions)
Beispiel #3
0
#!/usr/bin/env python
from ase import Atoms, Atom
from ase.calculators.aims import Aims, AimsCube
from ase.cluster.icosahedron import Icosahedron
from ase.io.aims import read_aims
from ase.optimize.basin import BasinHopping
from ase.optimize import LBFGS
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

atoms = Icosahedron('Pt', noshells=1)

calc = Aims(label='cluster/pt-isosahedron-1-bh',
              xc='pbe',
              spin='none',
              relativistic = 'atomic_zora scalar',
              sc_accuracy_etot=1e-5,
              sc_accuracy_eev=1e-3,
              sc_accuracy_rho=1e-4,
              sc_accuracy_forces=1e-3)
atoms.set_calculator(calc)

bh = BasinHopping(atoms)
bh.run(temperature=100 * kB, # 'temperature' to overcome barriers
       dr=0.5,               # maximal stepwidth
       optimizer=LBFGS,      # optimizer to find local minima
       fmax=0.1# maximal force for the optimizer
       )
Beispiel #4
0
    7: -16.505384,
}
N = 7
R = N**(1. / 3.)
np.random.seed(42)
pos = np.random.uniform(-R, R, (N, 3))
s = Atoms('He' + str(N), positions=pos)
s.set_calculator(LennardJones())
original_positions = 1. * s.get_positions()

ftraj = 'lowest.traj'

for GlobalOptimizer in [
        BasinHopping(s,
                     temperature=100 * kB,
                     dr=0.5,
                     trajectory=ftraj,
                     optimizer_logfile=None),
]:

    if str(GlobalOptimizer.__class__) == 'ase.optimize.basin.BasinHopping':
        GlobalOptimizer.run(10)
        Emin, smin = GlobalOptimizer.get_minimum()
    else:
        GlobalOptimizer(totalsteps=10)
        Emin = s.get_potential_energy()
        smin = s
    print "N=", N, 'minimal energy found', Emin,
    print ' global minimum:', E_global[N]

    # recalc energy
Beispiel #5
0
from ase import Atoms, Atom
from ase.calculators.aims import Aims
from ase.cluster.decahedron import Decahedron
from ase.optimize.basin import BasinHopping
from ase.units import kB
from ase.optimize import LBFGS


atoms = Decahedron('Pt',
                   p=2,  # natoms on 100 face normal to 5-fold axis
                   q=1,  # natoms 0n 100 parallel to 5-fold axis
                   r=0)  # depth of the Marks re-entrance?


calc = Aims(label='cluster/pt-decahedron-2-1-bh',
              xc='pbe',
              spin='none',
              relativistic = 'atomic_zora scalar',
              sc_accuracy_etot=1e-5,
              sc_accuracy_eev=1e-3,
              sc_accuracy_rho=1e-4,
              sc_accuracy_forces=1e-3)
atoms.set_calculator(calc)

bh = BasinHopping(atoms = atoms,
                  temperature=100 * kB, # 'temperature' to overcome barriers
                  dr=0.5,               # maximal stepwidth
                  optimizer=LBFGS,      # optimizer to find local minima
                  fmax=0.1
                  )
bh.run(10)
Beispiel #6
0
#!/usr/bin/env python
from ase import Atoms, Atom
from jasp import *
from ase.cluster.icosahedron import Icosahedron
from ase.optimize.basin import BasinHopping
from ase.units import kB
from ase.optimize import LBFGS

atoms = Atoms('Pt3', ([0, 0, 0], [0, 0, 2.0], [0, 2.0, 0.0]),
            cell=(8, 8, 8))


with jasp('cluster/pt3',
          xc='PBE',
          encut=450,
          kpts=[5, 5, 5],
          ismear=0,
          sigma=0.01, # this is small for a molecule
          ibrion=2,   # conjugate gradient optimizer
          nsw=500,      # do at least 5 steps to relax
          ediff=1e-5,   # set precise energies
          atoms=atoms) as calc:
    bh = BasinHopping(atoms = atoms,
                      temperature=100 * kB, # 'temperature' to overcome barriers
                      dr=0.5,               # maximal stepwidth
                      optimizer=LBFGS,      # optimizer to find local minima
                      fmax=0.1
                      )
    bh.run(100)
Beispiel #7
0
from ase.calculators.lj import LennardJones
from ase.optimize.basin import BasinHopping
from ase.io import PickleTrajectory, read
from ase.units import kB

N = 7
R = N**(1./3.)
pos = np.random.uniform(-R, R, (N, 3))
s = Atoms('He' + str(N),
          positions = pos)
s.set_calculator(LennardJones())

ftraj = 'lowest.traj'
traj = PickleTrajectory(ftraj, 'w', s)
bh = BasinHopping(s, 
                  temperature=100 * kB, dr=0.5, 
                  optimizer_logfile=None)
bh.attach(traj)
bh.run(10)

Emin, smin = bh.get_minimum()

# recalc energy
smin.set_calculator(LennardJones())
E = smin.get_potential_energy()
assert abs(E - Emin) < 1e-15
traj.close()
smim = read(ftraj)
E = smin.get_potential_energy()
assert abs(E - Emin) < 1e-15
Beispiel #8
0
from math import pi, sqrt
from ase import Atoms
from ase.calculators.lj import LennardJones
from ase.optimize.basin import BasinHopping
from ase.io import PickleTrajectory, read
from ase.units import kB

N = 7
R = N**(1. / 3.)
pos = np.random.uniform(-R, R, (N, 3))
s = Atoms('He' + str(N), positions=pos)
s.set_calculator(LennardJones())

ftraj = 'lowest.traj'
traj = PickleTrajectory(ftraj, 'w', s)
bh = BasinHopping(s, temperature=100 * kB, dr=0.5, optimizer_logfile=None)
bh.attach(traj)
bh.run(10)

Emin, smin = bh.get_minimum()

# recalc energy
smin.set_calculator(LennardJones())
E = smin.get_potential_energy()
assert abs(E - Emin) < 1e-15
traj.close()
smim = read(ftraj)
E = smin.get_potential_energy()
assert abs(E - Emin) < 1e-15

#view(smin)