Introduction¶
The DL_POLY Package¶
DL_POLY 122 is a package of subroutines, programs and data files, designed to facilitate molecular dynamics simulations of macromolecules, polymers, ionic systems and solutions on a distributed memory parallel computer. It is available in two forms: DL_POLY_Classic (written by Bill Smith & Tim Forester, http://www.ccp5.ac.uk/DL_POLY_CLASSIC/) and DL_POLY_5 (written by Ilian Todorov & Bill Smith) 134,135. Both versions were originally written on behalf of CCP5, the UK’s Collaborative Computational Project on Molecular Simulation, which has been in existence since 1980 113 (http://www.ccp5.ac.uk/DL_POLY/).
The two forms of DL_POLY differ primarily in their method of exploiting parallelism. DL_POLY_Classic uses a Replicated Data (RD) strategy 114,117,120,121 which works well simulations of up to 30,000 atoms on up to 100 processors. DL_POLY_5 is based on the Domain Decomposition (DD) strategy 88,97,114,117,134,135, and is best suited for large molecular simulations from \(10^{3}\) to \(10^{9}\) atoms on large processor counts. The two packages are reasonably compatible, so that it is possible to scale up from a DL_POLY_Classic simulation to a DL_POLY_5 one with little effort. It should be apparent from these comments that DL_POLY_5 is not intended as a replacement for DL_POLY_Classic.
Users are reminded that we are interested in hearing what other features could be usefully incorporated. We obviously have ideas of our own and CCP5 strongly influences developments, but other input would be welcome nevertheless. We also request that our users respect the integrity of DL_POLY_5 source and not pass it on to third parties. We require that all users of the package register with us, not least because we need to keep everyone abreast of new developments and discovered bugs. We have developed various forms of licence, which we hope will ward off litigation (from both sides), without denying access to genuine scientific users.
Further information on the DL_POLY packages may be obtained from the DL_POLY project website - http://www.ccp5.ac.uk/DL_POLY/.
Functionality¶
The following is a list of the features DL_POLY_5 supports.
Molecular Systems¶
DL_POLY_5 will simulate the following molecular species:
Simple atomic systems and mixtures, e.g. Ne, Ar, Kr, etc.
Simple unpolarisable point ions, e.g. NaCl, KCl, etc.
Polarisable point ions and molecules, e.g. MgO, H\(_{2}\)O, etc.
Simple rigid molecules e.g. CCl\(_{4}\), SF\(_{6}\), Benzene, etc.
Rigid molecular ions with point charges e.g. KNO\(_{3}\), (NH\(_{4}\))\(_{2}\)SO\(_{4}\), etc.
Polymers with rigid bonds, e.g. C\(_{n}\)H\(_{2n+2}\)
Polymers with flexible and rigid bonds and point charges, e.g. proteins, macromolecules etc.
Silicate glasses and zeolites
Simple metals and metal alloys, e.g. Al, Ni, Cu, Cu\(_{3}\)Au, etc.
Covalent systems as hydro-carbons and transition elements, e.g. C, Si, Ge, SiC, SiGe, ets.
Force Field¶
The DL_POLY_5 force field includes the following features:
#. All common forms of non-bonded atom-atom (van der Waals) potentials, where these also include bead-bead forms of Dissipative Particle Dynamics (DPD) interactions (inclusive of many-body DPD)
#. Atom-atom (and site-site) coulombic potentials, where these can be screened at desired distances as in DPD models
Metal-metal (local density dependent) potentials 25,39,40,93,127,131
Tersoff (local density dependent) potentials (for hydro-carbons) 128
Three-body valence angle and hydrogen bond potentials
Four-body inversion potentials
Ion core-shell polarasation
Tether potentials
Chemical bond potentials
Valence angle potentials
Dihedral angle (and improper dihedral angle) potentials
Inversion angle potentials
External field potentials.
The parameters describing these potentials may be obtained, for example, from the GROMOS 139, Dreiding 75 or AMBER 149 forcefield, which share functional forms. It is relatively easy to adapt to user specific force fields.
Boundary Conditions¶
DL_POLY_5 will accommodate the following boundary conditions:
None, e.g. isolated molecules in vacuo
Cubic periodic boundaries
Orthorhombic periodic boundaries
Parallelepiped periodic boundaries
Slab (x,y periodic, z non-periodic).
These are described in detail in Appendix B. Note that periodic boundary conditions (PBC) \(1\) and \(5\) above require careful consideration to enable efficient load balancing on a parallel computer.
Java Graphical User Interface¶
The DL_POLY_5 Graphical User Interface (GUI) is the same one that also comes with DL_POLY_Classic, which is written in the Java programming® language from Sun® Microsystems. A major advantage of this is the free availability of the Java programming environment from Sun®, and also its portability across platforms. The compiled GUI may be run without recompiling on any Java® supported machine. The GUI is an integral component of the DL_POLY suites and is available on the same terms (see the GUI manual 118).
Algorithms¶
Parallel Algorithms¶
DL_POLY_5 exclusively employs the Domain Decomposition parallelisation strategy 88,97,114,117 (see Section: Parallelisation).
Molecular Dynamics Algorithms¶
DL_POLY_5 offers a selection of MD integration algorithms based on Velocity Verlet (VV) 4. These generate NVE, NVE\(_{kin}\), NVT, NPT and NT ensembles with a selection of thermostats and barostats. Parallel versions of the RATTLE 7 and SHAKE 121 algorithms are used for solving bond constraints. The rotational motion of rigid bodies (RBs) is handled with the “NOSQUISH” algorithm of Miller et al 79.
The following MD algorithms are available:
Constant E algorithm
Evans constant E\(_{kin}\) algorithm 35
Langevin constant T algorithm 2
Andersen constant T algorithm 6
Berendsen constant T algorithm 11
Nosé-Hoover constant T algorithm 51
Langevin constant T,P algorithm 90
Berendsen constant T,P algorithm 11
Nosé-Hoover constant T,P algorithm 51
Martyna, Tuckerman and Klein (MTK) constant T,P algorithm 73
Langevin constant T,\(\underline{\underline{\mathbf{\sigma}}}\) algorithm 90
Berendsen constant T,\(\underline{\underline{\mathbf{\sigma}}}\) algorithm 11
Nosé-Hoover constant T,\(\underline{\underline{\mathbf{\sigma}}}\) algorithm 51
Martyna, Tuckerman and Klein (MTK) constant T,\(\underline{\underline{\mathbf{\sigma}}}\) algorithm 73.
Programming Style¶
The programming style of DL_POLY_5 is intended to be as uniform as possible. The following stylistic rules apply throughout. Potential contributors of code are requested to note the stylistic convention.
Programming Language¶
DL_POLY_5 is written in free format FORTRAN90. In DL_POLY_5 we have adopted the convention of explicit type declaration i.e. we have used
Implicit None
in all subroutines. Thus all variables must be given an explicit type:
Integer, Real( Kind = wp)
, etc.
Modularisation and Intent¶
DL_POLY_5 exploits the full potential of the modularisation concept in FORTRAN90. Variables having in common description of certain feature or method in DL_POLY_5 are grouped in modules. This simplifies subroutines’ calling sequences and decreases error-proneness in programming as subroutines must define what they use and from which module. To decrease error-proneness further, arguments that are passed in calling sequences of functions or subroutines have defined intent, i.e. whether they are to be:
passed in only (
Intent (In)
) - the argument is not allowed to be changed by the routinepassed out only (
Intent (Out)
) - the “coming in” value of the argument is unimportantpassed in both directions in and out (
Intent (InOut)
) - the “coming in” value of the argument is important and the argument is allowed to be changed.
Memory Management¶
DL_POLY_5 exploits the dynamic array allocation features of FORTRAN90 to assign the necessary array dimensions.
Target Platforms¶
DL_POLY_5 is intended for distributed memory parallel computers.
Compilation of DL_POLY_5 in parallel mode requires only a FORTRAN90 compiler and Message Passing Interface (MPI) to handle communications. Compilation of DL_POLY_5 in serial mode is also possible and requires only a FORTRAN90 compiler.
Internal Documentation¶
All subroutines are supplied with a header block of FORTRAN90 comment (!) records giving:
The name of the author and/or modifying author
The version number or date of production
A brief description of the function of the subroutine
A copyright statement.
Elsewhere FORTRAN90 comment cards (!) are used liberally.
FORTRAN90 Parameters and Arithmetic Precision¶
All global parameters defined by the FORTRAN90 parameter statements are
specified in the module file: setup_module`, which is included at
compilation time in all subroutines requiring the parameters. All
parameters specified in setup_module
are described by one or more
comment cards.
One super-global parameter is defined at compilation time in the
kinds_f90
module file specifying the working precision (wp
) by kind for
real and complex variables and parameters. The default is 64-bit
(double) precision, i.e. Real(wp)
. Users wishing to compile the code
with quadruple precision must ensure that their architecture and
FORTRAN90 compiler can allow that and then change the default in
kinds_f90
. Changing the precision to anything else that is allowed by
the FORTRAN90 compiler and the machine architecture must also be
compliant with the MPI working precision mpi_wp
as defined in
comms_module
(in such cases users must correct for that in there).
Units¶
Internally all DL_POLY_5 subroutines and functions assume the use of the following defined molecular units:
The unit of time (\(t_{o}\)) is \(1 \times 10^{-12}\) seconds (i.e. picoseconds)
The unit of length (\(\ell_{o}\)) is \(1 \times 10^{-10}\) metres (i.e. Ångstroms)
The unit of mass (\(m_{o}\)) is \(1.6605402 \times 10^{-27}\) kilograms (i.e. Daltons - atomic mass units)
The unit of charge (\(q_{o}\)) is \(1.60217733 \times 10^{-19}\) Coulombs (i.e. electrons - units of proton charge)
The unit of energy (\(E_{o}=m_{o}(\ell_{o}/t_{o})^{2}\)) is \(1.6605402 \times 10^{-23}\) Joules (10 J mol\(^{-1}\))
The unit of pressure (\({\cal P}_{o}=E_{o}\ell_{o}^{-3}\)) is \(1.6605402 \times 10^{7}\) Pascals (\(163.882576\) atmospheres)
Planck’s constant (\(\hbar\)) which is \(6.350780668 \times E_{o} t_{o}\) .
In addition, the following conversion factors are used:
The coulombic conversion factor (\(\gamma_{o}\)) is:
\[\gamma_{o} = \frac{1}{E_{o}} \left[ \frac{q_{o}^{2}}{4 \pi \epsilon_{o} \ell_{o}} \right] = 138935.4835~~,\]such that:
\[U_{\tt MKS}=E_{o}\gamma_{o}U_{\tt Internal}~~,\]where \(U\) represents the configuration energy.
The Boltzmann factor (\(k_{B}\)) is \(0.831451115~E_{o}\) K:math:^{-1}, such that:
\[T=E_{kin}/k_{B}\]represents the conversion from kinetic energy (in internal units) to temperature (in Kelvin).
Note
In the DL_POLY_5 OUTPUT file, the print out of pressure is in units of katms (kilo-atmospheres) at all times, except when DPD units are in use (which uses energy per unit volume, \([E] [L]^{-3}\)). The unit of energy is either DL_POLY units specified above, or in other units specified by the user at run time (see Section The FIELD File). The default is the DL_POLY unit.
Externally, DL_POLY_5 accepts information in its own specific formatting as described in Section The INPUT Files. Irrespective of formatting rules, all values provided to define input entities are read in DL_POLY units (except otherwise specified as in the case of energy units and, for DPD simulations, temperature units) or their composite mixture representing the corresponding entity physically, i.e. velocities’ components are in Ångstroms/picosecond.
Exception: It should be noted that when DL_POLY_5 is used in DPD mode (see Section Dissipative Particle Dynamics (DPD)) then the meaning of the molecular units is somewhat lost and it is only the inter-relationship between units that is important. This can be exploited by the modeller when using ‘dpd’ with the UNITS directive in the FIELD file! The fundamental units for a DPD simulation are related to those of mass \([M]\), length \([L]\) and energy \([E]\). Therefore, the DPD unit of time is equivalent to \([t] = [L]\sqrt{[M]/[E]}\) while temperature (in the form \(k_{B}T\)) is defined as two-thirds of the mean kinetic energy of the system’s particles. Similarly, volume is in units of \([L]^{3}\) and pressure in \([E]/[L]^{3}\), while velocities and forces are in \([L][t]^{-1} = \sqrt{[M]/[E]}\) and \([M][L][t]^{-2} = [E]/[L]\) respectively.
Error Messages¶
All errors detected by DL_POLY_5 during run time initiate a call to the subroutine
error
, which prints an error message in the standard output file and
terminates the program. All terminations of the program are global (i.e.
every node of the parallel computer will be informed of the termination
condition and stop executing).
In addition to terminal error messages, DL_POLY_5 will sometimes print warning messages. These indicate that the code has detected something that is unusual or inconsistent. The detection is non-fatal, but the user should make sure that the warning does represent a harmless condition.
Directory Structure¶
The entire DL_POLY_5 package is stored in a UNIX directory structure. The topmost directory is named dl_poly_5.nn, where nn is a generation number. Beneath this directory are several sub-directories named: manual, source, build, cmake, utils, execute, data, bench, java, and utility.
Briefly, the content of each sub-directory is as follows:
sub-directory |
contents |
manual |
DL_POLY_5 main user manual and DL_POLY_5 Java GUI manual |
source |
primary subroutines for the DL_POLY_5 package |
build |
makefiles to assemble and compile DL_POLY_5 source |
cmake |
contains files needed for DL_POLY_5 |
utils |
contains a series of scripts needed for testing |
execute |
the DL_POLY_5 run-time directory |
data |
example input and output files for DL_POLY_5 |
bench |
large test cases suitable for benchmarking |
java |
directory of Java and FORTRAN routines for the Java GUI |
utility |
directory of routines donated by DL_POLY_5 users |
A more detailed description of each sub-directory follows.
The source Sub-directory¶
In this sub-directory all the essential source code for DL_POLY_5, excluding the utility software is stored. In keeping with the ‘package’ concept of DL_POLY_5, it does not contain any complete programs; these are assembled at compile time using an appropriate makefile. The subroutines in this sub-directory are documented in Chapter Source Code.
The build Sub-directory¶
This sub-directory contains legacy makefiles for the creation (i.e. compilation and linking) of the DL_POLY_5 simulation program. The makefiles supplied select the appropriate subroutines from the source sub-directory and deposit the executable program in the execute directory. Building DL_POLY_5 by using these legacy makefiles is described in Section Compiling and Running.
The cmake Sub-directory¶
This sub-directory contains necessary scripts and information needed for DL_POLY_5
the CMake system. Building DL_POLY_5 with cmake
is described in
Section Compiling and Running.
The utils Sub-directory¶
This sub-directory contains a framework of scripts needed by DL_POLY_5 developers for testing purposes. The general user is welcome to look and learn from it. The scripts are the documentation themselves.
The execute Sub-directory¶
In the supplied version of DL_POLY_5, this sub-directory contains only a few macros for copying and storing data from and to the data sub-directory and for submitting programs for execution (see Appendix C). However, if the DL_POLY_5 program is assembled by using a legacy makefile, the executable will be placed in this sub-directory and could be used from here. Then output files from a job run in here will also appear here, so users may find it convenient to use this sub-directory as originally intended. (The experienced user is not at all required to use DL_POLY_5 this way however.)
The data Sub-directory¶
This sub-directory contains examples of input and output files for testing the released version of DL_POLY_5. The examples of input data are copied into the execute sub-directory when a program is being tested. The test cases are documented in Chapter Examples. Note that these are no longer within the distribution of any DL_POLY version but are downloaded when building with testing enabled in cmake.
The java Sub-directory¶
The DL_POLY_5 Java Graphical User Interface (GUI) is based on the Java® language developed by Sun®. The Java® source code for this GUI is to be found in this sub-directory. The source is complete and sufficient to create a working GUI, provided the user has installed the Java® Development Kit, (1.7 or above) which is available free from Sun® at http://java.sun.com/. The GUI, once compiled, may be executed on any machine where Java® is installed 118.
The utility Sub-directory¶
This sub-directory contains assorted routines donated by DL_POLY users. Potential users should note that these routines are unsupported and come without any guarantee or liability whatsoever. They should be regarded as potentially useful resources to be hacked into shape as needed by the user. Some of the various routines in this sub-directory are documented in the DL_POLY_Classic User Manual. Users who devise their own utilities are advised to store them in the utility sub-directory.
Obtaining the Source Code¶
To obtain a copy of DL_POLY_5 visit the DL_POLY GitLab website - https://gitlab.com/ccp5/dl-poly/, and follow instructions within i.e. the Building notes.
OS and Hardware Specific Ports¶
Note that no support is offered for these highly specific developments! However, the DL_POLY GitLab has plenty of notes on specific builds and offers the opportunity to submit requests, filed as Issues within GitLab.
Other Information¶
The DL_POLY website - http://www.ccp5.ac.uk/DL_POLY/, provides additional information in the form of
Access to all documentation (including licences)
Frequently asked questions
Bug reports
Access to the DL_Software portal.
Daresbury Laboratory also maintains a associated electronic mailing list, dl_poly_5_news, to which all registered DL_POLY_5 users are automatically subscribed. It is via this list that error reports and announcements of new versions are made. If you are a DL_POLY_5 user, but not on this list you may sign up by filling your details in the form - http://www.ccp5.ac.uk/DL_POLY/, and submitting it.