[ase-users] Parallelizing over NEB images

Divya Bohra - TNW D.Bohra at tudelft.nl
Tue Nov 21 15:48:14 CET 2017


Dear ASE users,

I am trying to perform my first CI-NEB calculation where I have 4 images between the initial and final images and the optimization of the images is parallelized (script below). I would greatly appreciate your help on the below 2 questions:


1.       What does the fmax for the optimizer specify exactly? Is this taken as the curvature at the initial and final states of the NEB interpolation? How does NEB determine the convergence criterion for the each of the images on the minimum energy path and where can I see this?


2.       When I read the log file, it seems like instead of logging the energy and max force for each image, it is logging the potential energy and max force for the image with the highest energy. I want to confirm that despite this, each of the images are separately optimized towards the convergence criteria and that this logging does not affect the optimization itself. Also, how can I make the log the forces and energies of each image separately for it to make more sense?

Thanks in advance.

Best regards,
Divya

from __future__ import print_function
from ase.constraints import FixAtoms
from ase.optimize import BFGS, QuasiNewton, LBFGS, MDMin
from ase.lattice.cubic import FaceCenteredCubic
from ase.build import fcc110, add_adsorbate
from gpaw import GPAW, PW, FermiDirac, Mixer
from ase.io import write, read,Trajectory
from ase import Atoms, Atom
from ase.neb import NEB
from ase.optimize.fire import FIRE
from ase.parallel import rank, size
import numpy as np

calc = GPAW('Ag110_2x3x6_BEEF.gpw')
CO2_slab=read('CINEB_Ag110_2x3x6_CO2-H_reference.traj')
COOH_slab=read('Ag110_2x3x6_COOHupLbridge_rot_BEEF.traj')

initial = CO2_slab
final = COOH_slab

constraint = FixAtoms(mask=[atom.tag > 2 for atom in initial])

n = size // 4      # number of cpu's per image
j = 1 + rank // n  # my image number
assert 4 * n == size

images = [initial]

for i in range(4):
    ranks = range(i * n, (i + 1) * n)
    image = initial.copy()

    if rank in ranks:
        calc=GPAW(mode=PW(450), xc='BEEF-vdW', basis='dzp', gpts=(48,48,160), kpts=(3,3,1), txt='CINEB_Ag110_2x3x6_CO2-COOH_Tafel_neb%d.txt' % j, occupations=FermiDirac(0.1), mixer=Mixer(beta=0.1, nmaxold=5, weight=50.0), communicator=ranks)
        image.set_calculator(calc)

    image.set_constraint(constraint)
    images += [image]

images += [final]

neb = NEB(images, parallel=True, climb=True)
neb.interpolate('idpp')
#Run NEB calculation
opt = LBFGS(neb, logfile='CINEB_Ag110_2x3x6_CO2-COOH_Tafel.log')
opt.run(fmax=0.05)

for i in range(1, 5):
    opt.attach(io.write('CINEB_Ag110_2x3x6_CO2-COOH_Tafel-%d.cif' % i, 'w', images[i]))
    opt.attach(io.Trajectory('CINEB_Ag110_2x3x6_CO2-COOH_Tafel-%d.traj' % i, 'w', images[i]))


#Logfile

LBFGS:   0  18:17:31    -5379.937600       6.8668
LBFGS:   1  18:44:44    -5380.096707       6.1825
LBFGS:   2  19:11:00    -5380.155402       4.4230
LBFGS:   3  19:39:07    -5380.249108       3.3944
LBFGS:   4  20:07:05    -5380.368769       3.2199
LBFGS:   5  20:35:12    -5380.521739       3.4305
LBFGS:   6  21:03:11    -5380.727266       3.9711
LBFGS:   7  21:31:13    -5380.953959       4.5234
LBFGS:   8  21:57:42    -5381.208836       5.0993
LBFGS:   9  22:24:52    -5381.490995       5.6717
LBFGS:  10  22:51:58    -5381.801246       6.2453
LBFGS:  11  23:19:50    -5382.139225       6.7877
LBFGS:  12  23:47:46    -5382.503905       7.2781
LBFGS:  13  00:14:56    -5382.896339       7.7335
LBFGS:  14  00:43:06    -5383.314196       8.1039
LBFGS:  15  01:12:07    -5383.755902       8.3441
LBFGS:  16  01:42:02    -5384.209731       8.3273
LBFGS:  17  02:12:50    -5384.660808       7.9158
LBFGS:  18  02:44:25    -5385.012915       7.1416
LBFGS:  19  03:14:20    -5385.247200       6.9705
LBFGS:  20  03:45:01    -5385.395184       7.2958
LBFGS:  21  04:15:33    -5385.502550       7.5201
LBFGS:  22  04:46:22    -5385.588210       7.6800
LBFGS:  23  05:17:00    -5385.661367       7.7952
LBFGS:  24  05:47:43    -5385.726172       7.8750
LBFGS:  25  06:18:26    -5385.784934       7.9238
LBFGS:  26  06:49:07    -5385.839004       7.9446
LBFGS:  27  07:20:34    -5385.889114       7.9381
LBFGS:  28  07:52:51    -5385.935424       7.9049
LBFGS:  29  08:25:06    -5385.974499       7.8480
LBFGS:  30  08:57:26    -5386.006282       7.7645
LBFGS:  31  09:29:42    -5386.029139       7.6479
LBFGS:  32  10:02:02    -5386.039673       7.4886
LBFGS:  33  10:35:16    -5386.032930       7.2809
LBFGS:  34  11:07:37    -5386.006100       7.0377
LBFGS:  35  11:39:01    -5385.960810       6.7818
LBFGS:  36  12:11:23    -5385.900440       6.5308
LBFGS:  37  12:44:37    -5385.829873       6.2943
LBFGS:  38  13:17:49    -5385.753279       6.0716
LBFGS:  39  13:50:59    -5385.675096       6.1741
LBFGS:  40  14:23:24    -5385.599475       6.4399
LBFGS:  41  14:54:54    -5385.530148       6.6489
LBFGS:  42  15:28:03    -5385.469514       6.8101


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.fysik.dtu.dk/pipermail/ase-users/attachments/20171121/b58d7085/attachment-0001.html>


More information about the ase-users mailing list