This is a short help file on how to use the computational Quantum Chemistry code "ADF" on our clusters. We require all users of this software to sign a statement. The software can only be accessed by persons who belong to a specific Unix group. See details below.
Important: Like other software packages, ADF is available on both the current "SW" production cluster and the new "Frontenac" platform. Here we document both. If you don't know which of the two platforms you are currently using, it is likely the "SW cluster".
ADF stands for "Amsterdam Density Functional" and denotes a package of programs that uses Density Functional Theory (DFT) for electronic and molecular structure calculations. The package is geared towards chemists and physicists with an interest in the structure of molecules and solids.
The ADF package consists of two main components:
Unlike most other molecular/solid/electronic structure codes, ADF employs "Slater-type" basis sets, ie, functions that have an exponential behaviour, which are more suitable for the description of chemical systems than the more commonly employed "Gaussian type" ones. The downside of this are computational difficulties that may be circumvented by numerical integration. Since DFT depends largely on numerical integration anyhow, the "Slater approach" is particularly well-suited for DFT code.
ADF is arguably the best DFT code available at this time for transition metal compounds and solids.
ADF handles geometry optimizations, transition states, reaction paths, and infrared frequencies. It allows the calculation of a variety of properties, ranging from UV spectra (requiring the treatment of excited states) to NMR chemical shifts and spin-spin couplings (where the use of Slater-type bases is of great use). The BAND code can be used for calculations on polymers, surfaces and bulk solids.
Location of the program and setup
The present version of ADF is 2017.108. The programs in the ADF package reside in /global/software/adf. To use ADF on our machines, it is required that you read our licensing agreement and sign a statement. You will then be made a member of a Unix group adf, which enables you to run the software.
ADF requires the sourcing of a setup script to function properly:
This script sets environment variables that are necessary for proper program execution and are used for the system to find executables and data files such as basis sets. Among others, SCMLICENSE is used by the license manager of the program to find a machine specific license file.
The above settings is best applied through a call to usepackage on our system. Issuing the command
module load adf
will take care of this, as well as including the $ADFBIN directory in the $PATH. This command may also be placed into a login shell setup file (.bash_profile).
One of the settings is the environment variable SCM_TMPDIR which is required to redirect the temporary files that ADF uses to the proper scratch space, presently
where hpcXXXX stands for your username. If for some reason ADF does not terminate normally (e.g. a job gets cancelled), it leaves behind large scratch files which you may have to delete manually. To check if such files exist, use the ls command. Usually the scratch files are in sub-directories that start with kid_:
$ ls $SCM_TMPDIR kid_0.ax49ZF kid_0.d9VDRE kid_0.LQQtwj kid_0.VLH2Ek kid_0.Zjn0mZ kid_0.BBskVK kid_0.DIHNlB kid_0.m1wEx2 kid_0.vMalpJ kid_1.1LZdFQ kid_0.cdUtDi kid_0.fnWCrB kid_0.pyWQ5u kid_0.wElmpK kid_2.mFNeFQ kid_0.cK4iVj kid_0.HVRsbX kid_0.QLOJsE kid_0.XHby8B kid_3.5t9REQ kid_0.AcBCde kid_0.cmepvE kid_0.kJ85iE kid_0.sX0Ddm kid_0.Y5xTMN
Once you have determined that the scratch files are no longer needed (because the program that used them is not running any more), you can delete them:
$ rm -r $SCM_TMPDIR/kid_* $ ls $SCM_TMPDIR $
Cleaning up the scratch space is the user's responsibility. If it is not done regularly, it can cause jobs to terminate, and much work to be lost.
Running ADF from a command line
The following instructions assume that you are a member of the Unix group "adf". The instructions in this section are only useful if you need to run test jobs of a short duration. If you want to run a production job, please refer to to instructions on how to start a ADF batch job.
Once program usage is set up through the "use" command, the program(s) can be run:
adf <in >out
Instructions about the job are read from standard input, which has been redirected from a file in in the above command lines. Commonly an input file will be constructed to specify what calculation is to be run. The output of the program(s) goes to "standard output" and has been redirected to an output file out above. Note that the output of these programs is commonly thousands of lines long and should therefore be redirected in any case.
The construction of a proper input file for ADF is an involved process, and is outside the scope of this help file. Detailed instructions can be found in the ADF User's Guide, which should be studied before the program can be used properly. As an initial hint, here is a sample input file:
title benzene BP/SZ bondorders tol=0.05 define cc=1.38476576 ccc=120.0 dih=0.0 hc=1.07212846 hcc= 120.0 dih2=180.0 end atoms Z-matrix C 0 0 0 C 1 0 0 cc C 2 1 0 cc ccc C 3 2 1 cc ccc dih C 4 3 2 cc ccc dih C 5 4 3 cc ccc dih H 2 1 3 hc hcc dih2 H 3 2 4 hc hcc dih2 H 4 3 5 hc hcc dih2 H 5 4 3 hc hcc dih2 H 6 5 4 hc hcc dih2 H 1 2 3 hc hcc dih2 end basis Type SZ Core None end symmetry NOSYM xc gga becke perdew end bondorder tol=0.05 printall noprint sfo
The input consists of several units, separated by blank lines, starting with a keyword, and ending with the statement END. For instance, the atoms in a molecules may be specified by issuing the keyword atoms, followed by one line with the atom name and "Z-matrix" relative coordinates for each atom, and closing with end (case insensitive).
Note: It is absolutely essential to have a good idea about the size and complexity of your calculations before you start a ADF job. Many of the methods have terrible scaling properties, i.e. the computational cost grows very quickly with the number of electrons, degrees of freedom, or number of basis functions used. We suggest you start with a small basis set and a cheap method, and then slowly increase those parameters.
Submitting (parallel) ADF jobs
In most cases, you will run ADF in batch mode through a scheduler. This is mandatory for production jobs, i.e. jobs of more than about 1 hr duration that use multiple processes, or multiple jobs submitted as part of a project. Production jobs that are submitted outside of the load balancing software will be terminated by the system administrator.
The advantage to submit jobs via a load balancing software is that the software will automatically find the resources required and put the job onto a node that has a low load. This will help executing the job faster.
Production jobs on Frontenac are submitted via SLURM. To obtain details, read our SLURM help file. For an ADF batch job, this means that rather than issuing the commands directly, you wrap them into a batch script. Here is an example for such a script:
#!/bin/bash #SBATCH --job-name=ADF_test #SBATCH --mail-type=ALL #SBATCH --mail-user=myEmail@whatever.com #SBATCH --output=STD.out #SBATCH --error=STD.err #SBATCH --nodes=1 #SBATCH --ntasks=8 #SBATCH --cpus-per-taskl=1 #SBATCH --time=30:00 #SBATCH --mem=1000 module load adf export SCM_TMPDIR=$TMPDIR adf -n $SLURM_NTASKS < testsys.adf
This script needs to be altered by replacing all the relevant items. It sets all the necessary environment variables through the "module load adf" command, and then starts the program. The lines in the script that start with #SBATCH are interpreted SLURM as directives for the execution of the program.
For instance the line "#SBATCH --mail-type=ALL" tells SLURM to notify the user via email when the job starts, finishes, or is cancelled. The line beginning with "#SBATCH --mail-user=" tells the scheduler about the email address of the user.
The --ooutput and --error lines determine whence the standard input and the standard error are to be redirected. Since the job is going to be executed in batch, no terminal is available as a default for these.
The ADF package is able to execute in parallel using MPI. This means that some tasks may be done in a fraction of the time it takes to execute on a single CPU.
ADF parallel jobs contains several lines that determine the number of parallel processes to be used. The --nodes line determines how many nodes a involved (at present this needs to be 1), while -ntasks relates how many tasks (MPI processes) are being used. This number is crucial, as it is being re-used as an option in the "adf" command line through the internal variable SLURM_NTASKS. In the example we chose 8. Finally, then --cpus-per-task option sets the number of cores per task to 1. This should be set to 1 for ADF jobs.
Once properly modified, the script (let's call it "adf.sh") can be submitted by typing
Migration SW -> Frontenac
The following is a list of differences concerning ADF usage on tghe SW cluster vs the new Frontenac cluster. The main impact comes from the different scheduler.
ADF is a licensed program. The license held by the Centre for Advanced Computing is limited to our computers at our main site. That means that any of our users can use the program on our machines (but nowhere else), whether they are located at Queen's or not.
We require users of ADF to sign a statement in which they state that they are informed about the terms of the license to be included in the ADF user group named "adf". Please fax the completed statement to (613) 533-2015 or scan/email to email@example.com.