Energy landscape exploration using BART
This lesson was created for an earlier version of BigDFT, from before the change to the yaml input format. A new version of the tutorial has not yet been created. In the meantime, bigdft-tool can be used to convert from the old input file format to the yaml format.
Contents |
Introduction
This document explains how to use BART (ART with BigDFT). This is not a complete instruction manual but it should help anybody interested in start to run an ART exploration.
In this tutorial we assume that the user is already familiar with basic BigDFT inputs. If this is not the case, the reader is advised to follow the First runs with BigDFT.
The central idea to ART is the activation, following the eigen-direction corresponding to a negative eigenvalue, of a configuration from a local minimum to a nearby saddle point. Many have proposed similar algorithms, but our emphasis was in developing an efficient algorithm that could be applied to systems with many thousands of degrees of freedom. A detailed history of the methodology can found here.
The basic algorithm can be divided into three steps:
- Leaving the harmonic well;
- Converging to the saddle point;
- Relaxing to a new minimum.
For the following tutorial, ethane molecule will be used. We will try to get its rotational barrier about the carbon-carbon bond, which is around 0.12 eV.
Structure Overview
Input files
Compulsory
- bart.sh: Set of ART parameters. A detailed discussion can be found in bart.pdf.
- input.dft : Same as the input file in case of BigDFT.
- input.geopt: Needed for relaxing to a new minimum. Same as the input file in case of BigDFT.
- posinp.xyz: Input coordinates for the starting configuration.
- psppar.XX : The pseudo-potential file. See BigDFT manual for explanations.
Optional
- list_atoms.dat : Label of atoms for type of events list and list_local.
- initdir.xyz : Coordinates of the system for imposing an initial direction in the activation. The name can be specified using the input variable INITDIR (without extension).
- restart.dat: For restart. The name can be specified using the input variable RESTART.
Output files
Everything is given in SI units (angstrom, electronvolt)
log.file.# : This file shows the evolution of the exploration for each event (minimum to minimum). Below is an example of it. The meaning of the first lines is obvious. But some definitions are needed:
- Simulation : 1 - Attempt : 1 - Starting from minconf : 1001 - Reference Energy (eV) : -3.0850944663E+03 - Temperature E-Eref m_perp ftot fpar fperp eigen delr npart evalf a1 ( eV ) ( eV/Ang ) ( eV/Ang**2 ) 0 K= 0 0.0488 3 5 2.1121 -1.8646 0.9919 0.0000 0.073 0 6 0.00 1 K= 1 0.9539 3 4 8.0144 -7.1235 3.6724 0.0000 0.311 4 11 0.00 2 K= 2 2.4005 3 4 9.9938 -9.0006 4.3436 -9.9162 0.551 7 48 0.99 3 L= 1 2.1784 1 1 9.3262 -1.6549 9.1782 -1.5226 0.599 9 65 0.41 4 L= 2 2.2695 1 1 8.7310 -2.7919 8.2726 -0.8074 0.678 14 82 0.93 5 L= 3 2.4675 1 1 8.2922 -3.7943 7.3731 -0.7226 0.752 15 99 0.93 6 L= 4 2.9094 1 1 7.8985 -5.6823 5.4862 -3.0939 0.833 15 116 0.95 7 L= 5 3.4288 1 1 7.4007 -6.3381 3.8209 -5.8044 0.906 15 133 0.99 8 L= 6 3.8385 2 2 6.6976 -6.0391 2.8960 -7.9541 0.978 15 151 1.00 9 L= 7 4.1654 3 3 5.8915 -5.5246 2.0467 -9.5780 1.050 16 170 1.00 10 L= 8 4.4399 4 4 5.0526 -4.8850 1.2904 -10.7619 1.123 17 190 1.00 11 L= 9 4.6888 5 5 4.2076 -4.1562 0.6559 -11.8435 1.191 17 211 1.00 12 L= 10 4.9066 5 5 3.3740 -3.3491 0.4090 -12.8037 1.244 17 232 0.99 13 L= 11 5.0642 5 5 2.5215 -2.4860 0.4217 -13.6751 1.283 17 253 0.99 14 L= 12 5.1450 6 6 1.5650 -1.5003 0.4454 -15.8544 1.302 17 275 0.99 15 L= 13 5.1615 6 6 0.6170 -0.3929 0.4756 -15.8544 1.309 17 282 0.99 16 D= 1 5.1464 0 0 0.5217 0.0000 0.0000 0.0000 1.310 17 283 0.00 17 D= 2 5.1465 0 0 0.5321 0.0000 0.0000 0.0000 1.310 17 284 0.00 18 D= 3 5.1469 0 0 0.5483 0.0000 0.0000 0.0000 1.308 17 285 0.00 19 D= 4 5.1454 0 0 0.4426 0.0000 0.0000 0.0000 1.292 16 286 0.00 20 D= 5 5.1338 0 0 0.3263 0.0000 0.0000 0.0000 1.273 16 287 0.00 21 D= 6 5.1317 0 0 0.3006 0.0000 0.0000 0.0000 1.267 16 288 0.00 22 D= 7 5.1273 0 0 0.1964 0.0000 0.0000 0.0000 1.250 16 289 0.00 SADDLE 1001 CONVERGED |ret 10022 |delta energy= 5.1273 |force_(tot,par,perp)= 0.1964 0.0353 0.1932 |eigenval= -23.9017 |npart= 16 |delr= 1.250 |evalf= 304 | - Configuration stored in file : sad1001 - Total energy Saddle (eV) : -3.0799671211E+03 RELAXATION - Configuration stored in file : min1001 - Total energy Minimum (eV) : -3.0840521163E+03 MINIMUM 1001 REJECTED |E(fin-ini)= 1.0424 |E(fin-sad)= -4.0850 |npart= 16 |delr= 1.830 |evalf= 353 |
- Stage (2nd column): K (leaving the harmonic well), L ( convergence to saddle point ) or D ( DIIS ).
- E-Eref (4th): Energy difference between the initial configuration, i.e. the minimum, and the activated one.
- m_perp (5th-6th): Number of steps done, and attempted, in the hyperplane for the minimization process of energy (forces).
- ftot (7th): Norm of the total force in the system.
- fpar (8th): Force parallel to the eigendirection associated with the negative eigenvalue (convergence). In the push outside the harmonic well, force parallel to the random direction selected.
- fpar (9th): Perpendicular projection of the force on the selected direction.
- eigen (10th): Magnitude of the lowest eigenvalue.
- delr (11th): Displacement (square root of the sum of the squares) from initial configuration (reference).
- npart (12th): Number of atoms displaced by more than 0.1 angstroems.
- evalf (13th): Total number of force evaluations for the event.
- a1 (14th): Projection of the current eigendirection on the previous one.
- screen output : Includes the BigDFT standard output information plus more detailed information about ART. Grep the BART keyword.
- events.list : Includes the connection between minima. It states if the event was accepted. Useful for postprocessing.
- p_event_attempt_step_stage.xyz : The coordinates of the system at each step if Write_xyz==.True.
- min"event".xyz : The coordinates of the system at each minimum.
- min"event" : Same as before, but useful for postprocessing.
- sad"event".xyz : The coordinates of the system at each saddle.
- sad"event" : Same as before, but useful for postprocessing.
- restart.dat : If the file exists in the directory, the simulation will restart from the step containing in it. A new log.file"#+1" will be created.
Sending a first simulation
ART is based in a random exploration of the energy landscape of the system around a given minimum. However, for the sake of having an idea of a successful event , we have chosen an initial direction that assures a convergence to the saddle point in a short time. Let's do this first. This simulation takes in average 40 minutes. Do the following modification in the bart.sh input Media:
EVENT_TYPE GUESS_DIRECTION
and add the initdir.xyz file to your work directory.
Fine tuning of the parameters
The success of an ART exploration relies on the fine tune of the parameters according to the material studied. In principle, you have to figure out what is best for you by trial and error. Let's take a look of the most important.
WARNING The ART method is based in the estimation of the curvature of the energy potential. Therefore, the user should choose a basis set accurate enough.
Exercise 1: Setting the step of the numerical derivative of forces in lanczos, set in bart.sh these parameters:
Setup_Initial .True. Number_Lanczos_Vectors_A 16 delta_disp_Lanczos 0.01 Lanczos_of_minimum .True.
For a given number of lanczos vectors, change delta_disp_Lanczos parameter, let's say between 0.0005 and 0.05. The goal is to determine a correct parameter having in mind the precision and limitations of our methods. Normal values are around 0.01. You will see something like this :
RELAXATION - Configuration stored in file : min1000 Starting Lanczos Em= -4.0553758474E+02 ( gnrm = 1.0E-05 ) Iter Ep-Em (eV) Eigenvalue a1 1 -8.63E-07 0.101958 0.0000 2 -8.95E-07 0.001721 0.9841 3 -8.98E-07 0.000085 1.0000 Done Lanczos . . . 4 K= 4 2.3984 3 3 6.7387 -6.0054 3.0569 -0.2533 1.003 5 55 0.78 Starting Lanczos Em= -4.0210289625E+02 ( gnrm = 1.0E-05 ) Iter Ep-Em (eV) Eigenvalue a1 1 4.58E-03 -4.712874 0.0000 2 4.57E-03 -5.115414 0.9993 3 4.57E-03 -5.098967 1.0000 Done Lanczos 5 K= 5 3.4347 3 5 6.1357 -5.7408 2.1655 -5.0990 1.210 7 109 0.78
Three iterations of the lanczos method are done for the minimum and for a perturbated configuration. Positive values are expected for your minimum.
- Check the convergence of the eigenvalue.
- Check the time per force evaluations.
Exercise 2: Setting the number of lanczos vectors, set in bart.sh these parameters:
Setup_Initial .True. Number_Lanczos_Vectors_A 16 delta_disp_Lanczos 0.01 Lanczos_of_minimum .True.
For a given delta_disp_Lanczos, change the Number_Lanczos_Vectors_A parameter, let's say between 13 and 19. Usually values are around 16.
- Check the convergence of the eigenvalue.
- Check the time per force evaluations.
Check the displacement of the system for a first negatives eigenvalues.
Exercise 3: Setting Eigenvalue_Threshold, set in bart.sh these parameters:
Setup_Initial .True. setenv Min_Number_KSteps 3 # Min. number of ksteps before calling lanczos setenv Eigenvalue_Threshold -0.05 # Eigenvalue threshold for leaving basin
We need to test the threshold for having left the harmonic well. If this is too small, the program never converges to a saddle point, if it is so large, the program will follow the initial random direction too much, reducing the odds to find low energy barriers.
- Check the displacement of the system for the first negatives eigenvalues.
- Change Min_Number_KSteps between 1 and 4. Check the number of force evaluations and the evolution of the eigenvalue
Exercise 4: Setting Basin_Factor, set in bart.sh these parameters:
Basin_Factor 2.1
This parameter helps you to leaving of the harmonic well as soon as possible, but take care. Play with diffent values and,
- Check the displacement of the system for a first negatives eigenvalues.
- Check the evolution of the eigenvalue and their projection
Exercise 5: Setting Type_of_Events, set in bart.sh these parameters:
Type_of_Events Radius_Initial_Deformation 1.2 Central_Atom 1
Play with the diffents options, i.e. global, local, list_local, and list.
- Check the displacement of the system for a first negatives eigenvalues.
- Check the evolution of the eigenvalue and their projection